📄 frame1.java
字号:
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 + -