⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frame1.java

📁 Java开发的操作系统实验
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        jScrollPane5.paintAll(jScrollPane5.getGraphics());
        model2.removeRow(jTable2.getSelectedRow());
        jScrollPane2.paintAll(jScrollPane2.getGraphics());
      }
    }
  }

  public class ProcessRun
      extends Thread {
    public void run() {
      volume = Integer.parseInt(jTextField1.getText().trim());
      if (jRadioButton2.isSelected()) {
        timeslice = Integer.parseInt(jTextField2.getText().trim());
      }
      for (int i = 0; i < ( (volume > number) ? number : volume); i++) {
        Readyvector.addElement( (PCB) Storevector.elementAt(0));
        model2.addRow( (PCB) Readyvector.elementAt(i));
        model1.removeRow(0);
        Storevector.removeElementAt(0);
      }
      jScrollPane1.paintAll(jScrollPane1.getGraphics());
      jScrollPane2.paintAll(jScrollPane2.getGraphics());
      pause();
      Runprocess = (PCB) Readyvector.elementAt(0);
      model3.addRow(Runprocess);
      jScrollPane3.paintAll(jScrollPane3.getGraphics());
      model2.removeRow(0);
      jScrollPane2.paintAll(jScrollPane2.getGraphics());
      while (Readyvector.size() != 0) {
        accept = true;
        pause();
        accept = false;
        if (jRadioButton2.isSelected()) {
          Runprocess.Runtime = Integer.valueOf(Runprocess.Runtime.intValue() +
                                               timeslice);
        }
        else {
          Runprocess.Runtime = Integer.valueOf(Runprocess.Runtime.intValue() +
                                               1);
          Runprocess.Priv = Integer.valueOf(Runprocess.Priv.intValue() - 1);
          if (Runprocess.Priv.intValue() < 1) {
            Runprocess.Priv = Integer.valueOf(1);
          }
        }
        if (Runprocess.Runtime.compareTo(Runprocess.Sumtime) >= 0) {
          Runprocess.Runtime = Runprocess.Sumtime;
          ( (PCB) Readyvector.elementAt(0)).update();
          model4.addRow( (PCB) Readyvector.elementAt(0)); //完成
          jScrollPane4.paintAll(jScrollPane4.getGraphics());
          Readyvector.removeElementAt(0);
          model3.removeRow(0);
          jScrollPane3.paintAll(jScrollPane3.getGraphics());
          if (Storevector.size() != 0) { //从后备队列中添加进程到就绪队列中
            int insert = 0;
            if (jRadioButton2.isSelected()) {
              Readyvector.addElement( (PCB) Storevector.elementAt(0));
              model2.addRow( (PCB) Storevector.elementAt(0));
            }
            else {
              for (int i = 0; i < Readyvector.size(); i++) {
                if ( ( (PCB) Storevector.elementAt(0)).Priv.compareTo( ( (PCB)
                    Readyvector.
                    elementAt(i)).Priv) <= 0) {
                  insert++;
                }
              }
              Readyvector.insertElementAt( (PCB) Storevector.elementAt(0),
                                          insert);
              model2.insertRow(insert, (PCB) Storevector.elementAt(0));
            }
            Storevector.removeElementAt(0);
            model1.removeRow(0);
            jScrollPane1.paintAll(jScrollPane1.getGraphics());
          }
          if (Readyvector.size() == 0) {
            synchronized (this) {
              try {
                this.wait();
              }
              catch (InterruptedException ew) {}
            }
          }
          else {
            Runprocess = new PCB();
            Runprocess = (PCB) Readyvector.elementAt(0);
            model3.addRow(Runprocess);
            jScrollPane3.paintAll(jScrollPane3.getGraphics());
            model2.removeRow(0);
            jScrollPane2.paintAll(jScrollPane2.getGraphics());
          }
        }
        else {
          Runprocess.update();
          if (Readyvector.size() > 1) {
            int insert = 0;
            if (jRadioButton2.isSelected()) {
              Readyvector.removeElementAt(0);
              Readyvector.addElement( (PCB) Runprocess);
              model2.removeRow(0);
              model2.addRow(Runprocess);
              jScrollPane2.paintAll(jScrollPane2.getGraphics());
            }
            else {
              for (int i = 1; i < Readyvector.size(); i++) {
                if (Runprocess.Priv.compareTo( ( (PCB) Readyvector.elementAt(i)).
                                              Priv) < 0) {
                  insert++;
                }
              }
              if (insert > 0) {
                Readyvector.removeElementAt(0);
                Readyvector.insertElementAt( (PCB) Runprocess, insert);
                model2.removeRow(0);
                model2.insertRow(insert - 1, Runprocess);
                jScrollPane2.paintAll(jScrollPane2.getGraphics());
              }
            }
            Runprocess = new PCB();
            Runprocess = (PCB) Readyvector.elementAt(0);
          }
          model3.removeRow(0);
          model3.addRow(Runprocess);
          jScrollPane3.paintAll(jScrollPane3.getGraphics());
          System.out.println("" + Runprocess.PCBtoString());
        }
        if (hangit) {
          Hangle();
          hangit=false;
        }
        if (run && (Readyvector.size() < volume) && (Storevector.size() > 0)) {
          if (jRadioButton2.isSelected()) {
            Readyvector.addElement( (PCB) Storevector.elementAt(0));
            model1.removeRow(0);
            jScrollPane1.paintAll(jScrollPane1.getGraphics());
            model2.addRow( (PCB) Storevector.elementAt(0));
            Storevector.removeElementAt(0);
            jScrollPane2.paintAll(jScrollPane2.getGraphics());
          }
          else {
            int insert = 1;
            for (int i = 1; i < Readyvector.size(); i++) {
              if ( ( (PCB) Storevector.elementAt(0)).Priv.compareTo( ( (PCB)
                  Readyvector.elementAt(i)).Priv) <= 0) {
                insert++;
              }
            }
            Readyvector.insertElementAt( (PCB) Storevector.elementAt(0), insert);
            model1.removeRow(0);
            jScrollPane1.paintAll(jScrollPane1.getGraphics());
            model2.insertRow(insert - 1, (PCB) Storevector.elementAt(0));
            Storevector.removeElementAt(0);
            jScrollPane2.paintAll(jScrollPane2.getGraphics());
          }
        }
      }
    }
  }

  public void itemStateChanged(ItemEvent e) {
    if (jRadioButton2.isSelected()) {
      jTextField2.setEnabled(true);
    }
    else {
      jTextField2.setEnabled(false);
    }
  }

  public void pause() { /* 迟延函数  */
    try {
      Thread.sleep(3000);
      System.out.println("" + Thread.currentThread().getName());
    }
    catch (InterruptedException e) {
      JOptionPane.showMessageDialog(this, "停顿出错!", "错误", 0);
    }
  }

  public void Sort() {
    int insert = 0, i;
    for (i = 0; i < number - 1; i++) {
      if ( ( (PCB) Storevector.elementAt(number -
                                         1)).Priv.compareTo( ( (PCB)
          Storevector.elementAt(i)).Priv) <= 0) {
        insert++;
      }
    }
    temp = (PCB) Storevector.elementAt(number - 1);
    if (i > 0) {
      Storevector.add(insert, temp);
      Storevector.removeElementAt(number);
    }
    model1.insertRow(insert, temp);
  }

  class Process
      extends JDialog implements ActionListener {
    JLabel label1 = new JLabel("进程名:");
    JLabel label2 = new JLabel("优先权:");
    JLabel label3 = new JLabel("要求运行时间:");
    JButton OK = new JButton("OK");
    JButton Cancel = new JButton("Cancel");
    JTextField pidtf = new JTextField("");
    JTextField privtf = new JTextField("");
    JTextField rtimetf = new JTextField("");
    Process(Frame1 parent, boolean modal) {
      super(parent, modal);
      this.setLayout(null);
      setSize(new Dimension(302, 226));
      setTitle("Creat Process");
      label1.setBounds(new Rectangle(71, 30, 49, 15));
      label2.setBounds(new Rectangle(72, 70, 48, 15));
      label3.setBounds(new Rectangle(35, 110, 85, 15));
      this.add(label1);
      this.add(label2);
      this.add(label3);
      OK.setBounds(new Rectangle(43, 154, 69, 23));
      Cancel.setBounds(new Rectangle(140, 154, 69, 23));
      this.add(OK);
      this.add(Cancel);
      pidtf.setBounds(new Rectangle(145, 22, 77, 20));
      privtf.setBounds(new Rectangle(145, 65, 77, 20));
      rtimetf.setBounds(new Rectangle(145, 108, 77, 20));
      this.add(pidtf);
      this.add(privtf);
      this.add(rtimetf);
      OK.addActionListener(this);
      Cancel.addActionListener(this);
      pidtf.setDocument(new LimitedDocument(2));
      privtf.setDocument(new LimitedDocument(1));
      rtimetf.setDocument(new LimitedDocument(1));
    }

    public void actionPerformed(ActionEvent e) {
      if (e.getSource() == OK) {
        String pids = pidtf.getText().trim();
        String privs = privtf.getText().trim();
        String sumtimes = rtimetf.getText().trim();
        PCB pcb = new PCB(pids, Integer.valueOf(privs),
                          Integer.valueOf(sumtimes));
        System.out.println(pcb.PCBtoString());
        Storevector.addElement(pcb);
        number = Storevector.size();
        if (jRadioButton2.isSelected()) {
          model1.addRow(pcb);
        }
        else {
          Sort();
        }
        pidtf.setText("");
        privtf.setText("");
        rtimetf.setText("");
        if ( (Readyvector.size() == 0) && run) {
          synchronized (prt) {
            accept = true;
            prt.notify();
          }
          Readyvector.insertElementAt( (PCB) Storevector.elementAt(0), 0);
          Runprocess = new PCB();
          Runprocess = (PCB) Readyvector.elementAt(0);
          model3.addRow(Runprocess);
          jScrollPane3.paintAll(jScrollPane3.getGraphics());
          model1.removeRow(0);
          jScrollPane1.paintAll(jScrollPane5.getGraphics());
          Storevector.removeElementAt(0);
        }
        if (run && (Readyvector.size() < volume) && accept && (number > 0)) {
          if (jRadioButton2.isSelected()) {
            Readyvector.addElement( (PCB) Storevector.elementAt(0));
            model1.removeRow(0);
            jScrollPane1.paintAll(jScrollPane1.getGraphics());
            model2.addRow( (PCB) Storevector.elementAt(0));
            Storevector.removeElementAt(0);
            jScrollPane2.paintAll(jScrollPane2.getGraphics());
          }
          else {
            int insert = 1;
            for (int i = 1; i < Readyvector.size(); i++) {
              if ( ( (PCB) Storevector.elementAt(0)).Priv.compareTo( ( (PCB)
                  Readyvector.elementAt(i)).Priv) <= 0) {
                insert++;
              }
            }
            Readyvector.insertElementAt( (PCB) Storevector.elementAt(0), insert);
            model1.removeRow(0);
            jScrollPane1.paintAll(jScrollPane1.getGraphics());
            model2.insertRow(insert - 1, (PCB) Storevector.elementAt(0));
            Storevector.removeElementAt(0);
            jScrollPane2.paintAll(jScrollPane2.getGraphics());
          }
        }
      }
      else {
        dispose();
      }
    }
  }

  class LimitedDocument
      extends PlainDocument {
    private int _maxLength = -1; //长度无限制
    public LimitedDocument() {
      super();
    }

    public LimitedDocument(int maxLength) {
      super();
      this._maxLength = maxLength;
    }

    public void insertString(int offset, String str, AttributeSet attrSet) throws
        BadLocationException {
      int len = this.getLength();
      if (len >= _maxLength) {
        Toolkit.getDefaultToolkit().beep();
        return;
      }
      super.insertString(offset, str, attrSet);
    }
  }

  class MyModel
      extends DefaultTableModel {
    public MyModel(Vector columnNames, int rowCount) {
      super(columnNames, rowCount);
    }

    public boolean isCellEditable(int rowindex, int columnindex) {
      return false; //使jTable不可编辑,但是可以选择行,也可以选择列
    }
  }

}

class PCB
    extends Vector {
  String PID;
  Integer Priv;
  Integer Sumtime;
  Integer Runtime = Integer.valueOf(0);

  public PCB(String PID, Integer Priv, Integer Sumtime) {
    this.PID = PID;
    this.Priv = Priv;
    this.Sumtime = Sumtime;
    this.addElement(PID);
    this.addElement(Priv);
    this.addElement(Sumtime);
    this.addElement(Runtime);
  }

  public PCB() {
  }

  public String PCBtoString() {
    return PID + "          " + String.valueOf(Priv) + "           " +
        String.valueOf(Sumtime) + "          " + String.valueOf(Runtime);
  }

  public void update() {
    this.setElementAt(this.Priv, 1);
    this.setElementAt(this.Runtime, 3);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -