刚学java,各位帮忙添加一下我的代码,虽然有点长,但是要实现的功能不是很复杂,主要是创建和启动进程(先来先服务算法)。而且界面方面已经实现。
主要问题是事件实现函数部分,不知道怎么写,怎么在创建进程完后,继续让进程运行……最后:感激不尽……
第一类pcbpackage process;
public class pcb { static final int Running=1;
static final int Ready=2;
static final int Waiting=3;
private String processname;
private int runtime; //生存周期
private int prority; //优先级
private int processstate; //状态
private int pcbflag; //暂定
public pcb(String name,int time,int pro)
{
this.processname=name;
this.runtime=time;
this.prority=pro; }
public pcb()
{
pcbflag=0;
}
public void setprocessname(String name)
{
this.processname=name; }
public String getprocessname()
{
return processname;
}
public void setruntime(int time)
{
this.runtime=time; }
public int getruntime()
{
return runtime;
}
public void setprority(int pro)
{
this.prority=pro;
}
public int getprority()
{
return prority;
}
public void setprocessstate(int state)
{
this.processstate=state;
}
public String getprocessstate()
{
String s=new String();
if(this.processstate==1)
{
s="runing"; }
else if(this.processstate==2)
{
s="ready";
}
else if(this.processstate==3)
s="waiting";
return s; }}主类package process;import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
public class Main {
private JButton startbutton; //开始
private JButton newbutton; //新建 private JLabel namelabel;
private JLabel proritylabel;
private JLabel timelabel; private JLabel readylabel;
private JLabel runinglabel; private JTable readytable;
private JTable runingtable; private JTextField nametext;
private JTextField timetext;
private JComboBox proritycom; //优先级设置 private JPanel newpanel;
private JPanel readypanel;
private JScrollPane readysp;
private JScrollPane runingsp; Vector waitingvectorname; pcb []readyarray;
pcb []newarray; Object[][] readydata;
Object[][] runingdata; int first;
int end;
int count=0; //就绪队列中的进程数量
pcb a;
pcb test; public Main()
{
a=new pcb();
first=0;
end=0;
JFrame jf=new JFrame("进程调度");
Container c=jf.getContentPane();
c.setLayout(null); newpanel=new JPanel();
newpanel.setLayout(null);
readypanel=new JPanel();
readypanel.setLayout(null); startbutton=new JButton("开始");
newbutton=new JButton("新建进程"); namelabel=new JLabel("进程名");
proritylabel=new JLabel("优先级");
timelabel=new JLabel("生存期");
readylabel=new JLabel("就绪队列");
runinglabel=new JLabel("运行进程"); nametext=new JTextField();
timetext=new JTextField();
proritycom=new JComboBox(); readyarray=new pcb[8];
waitingvectorname=new Vector(); readydata=new Object[8][4];
runingdata=new Object[1][3]; String []col1={"进程","生存期","优先级","状态"};
String []col2={"进程","生存期","优先级"}; readytable=new JTable(readydata,col1);
readytable.setEnabled(false);
runingtable=new JTable(runingdata,col2);
runingtable.setEnabled(false); runingsp=new JScrollPane();
readysp=new JScrollPane();
readysp.getViewport().add(readytable);
runingsp.getViewport().add(runingtable);
runingtable.setRowHeight(22);
readytable.setRowHeight(22); for(int i=1;i<=10;i++)
proritycom.addItem(i); newpanel.setSize(450,100);
newpanel.setLocation(0,10);
namelabel.setSize(80,20);
namelabel.setLocation(10,5);
nametext.setSize(100,25);
nametext.setLocation(10,30); proritylabel.setSize(80,20);
proritylabel.setLocation(140,5);
proritycom.setSize(100,25);
proritycom.setLocation(140,30); timelabel.setSize(80,20);
timelabel.setLocation(280,5);
timetext.setSize(100,25);
timetext.setLocation(280,30);
newbutton.setSize(120,20);
newbutton.setLocation(140,80); readysp.setSize(400,100);
readysp.setLocation(10,30);
runingsp.setSize(400,43);
runingsp.setLocation(10,250); readypanel.setSize(450,410);
readypanel.setLocation(0,120);
readylabel.setSize(100,22);
readylabel.setLocation(10,2);
startbutton.setSize(80,20);
startbutton.setLocation(147,350);
runinglabel.setSize(100,20);
runinglabel.setLocation(10,200); c.add(newpanel);
newpanel.add(namelabel);
newpanel.add(nametext);
newpanel.add(proritylabel);
newpanel.add(proritycom);
newpanel.add(timelabel);
newpanel.add(timetext);
newpanel.add(newbutton); readypanel.add(runingsp);
readypanel.add(readysp);
readypanel.add(readylabel);
readypanel.add(runinglabel);
readypanel.add(startbutton);
c.add(readypanel); jf.setSize(450,550);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
startbutton.addActionListener(new MyActionListener());
newbutton.addActionListener(new MyActionListener());
} class MyActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
}
public static void main(String[] args) {
new Main(); }}
本来想插入图片,不知道怎么弄,第一次发帖,勿喷……
大家给个建议参考一下吧。
主要问题是事件实现函数部分,不知道怎么写,怎么在创建进程完后,继续让进程运行……最后:感激不尽……
第一类pcbpackage process;
public class pcb { static final int Running=1;
static final int Ready=2;
static final int Waiting=3;
private String processname;
private int runtime; //生存周期
private int prority; //优先级
private int processstate; //状态
private int pcbflag; //暂定
public pcb(String name,int time,int pro)
{
this.processname=name;
this.runtime=time;
this.prority=pro; }
public pcb()
{
pcbflag=0;
}
public void setprocessname(String name)
{
this.processname=name; }
public String getprocessname()
{
return processname;
}
public void setruntime(int time)
{
this.runtime=time; }
public int getruntime()
{
return runtime;
}
public void setprority(int pro)
{
this.prority=pro;
}
public int getprority()
{
return prority;
}
public void setprocessstate(int state)
{
this.processstate=state;
}
public String getprocessstate()
{
String s=new String();
if(this.processstate==1)
{
s="runing"; }
else if(this.processstate==2)
{
s="ready";
}
else if(this.processstate==3)
s="waiting";
return s; }}主类package process;import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
public class Main {
private JButton startbutton; //开始
private JButton newbutton; //新建 private JLabel namelabel;
private JLabel proritylabel;
private JLabel timelabel; private JLabel readylabel;
private JLabel runinglabel; private JTable readytable;
private JTable runingtable; private JTextField nametext;
private JTextField timetext;
private JComboBox proritycom; //优先级设置 private JPanel newpanel;
private JPanel readypanel;
private JScrollPane readysp;
private JScrollPane runingsp; Vector waitingvectorname; pcb []readyarray;
pcb []newarray; Object[][] readydata;
Object[][] runingdata; int first;
int end;
int count=0; //就绪队列中的进程数量
pcb a;
pcb test; public Main()
{
a=new pcb();
first=0;
end=0;
JFrame jf=new JFrame("进程调度");
Container c=jf.getContentPane();
c.setLayout(null); newpanel=new JPanel();
newpanel.setLayout(null);
readypanel=new JPanel();
readypanel.setLayout(null); startbutton=new JButton("开始");
newbutton=new JButton("新建进程"); namelabel=new JLabel("进程名");
proritylabel=new JLabel("优先级");
timelabel=new JLabel("生存期");
readylabel=new JLabel("就绪队列");
runinglabel=new JLabel("运行进程"); nametext=new JTextField();
timetext=new JTextField();
proritycom=new JComboBox(); readyarray=new pcb[8];
waitingvectorname=new Vector(); readydata=new Object[8][4];
runingdata=new Object[1][3]; String []col1={"进程","生存期","优先级","状态"};
String []col2={"进程","生存期","优先级"}; readytable=new JTable(readydata,col1);
readytable.setEnabled(false);
runingtable=new JTable(runingdata,col2);
runingtable.setEnabled(false); runingsp=new JScrollPane();
readysp=new JScrollPane();
readysp.getViewport().add(readytable);
runingsp.getViewport().add(runingtable);
runingtable.setRowHeight(22);
readytable.setRowHeight(22); for(int i=1;i<=10;i++)
proritycom.addItem(i); newpanel.setSize(450,100);
newpanel.setLocation(0,10);
namelabel.setSize(80,20);
namelabel.setLocation(10,5);
nametext.setSize(100,25);
nametext.setLocation(10,30); proritylabel.setSize(80,20);
proritylabel.setLocation(140,5);
proritycom.setSize(100,25);
proritycom.setLocation(140,30); timelabel.setSize(80,20);
timelabel.setLocation(280,5);
timetext.setSize(100,25);
timetext.setLocation(280,30);
newbutton.setSize(120,20);
newbutton.setLocation(140,80); readysp.setSize(400,100);
readysp.setLocation(10,30);
runingsp.setSize(400,43);
runingsp.setLocation(10,250); readypanel.setSize(450,410);
readypanel.setLocation(0,120);
readylabel.setSize(100,22);
readylabel.setLocation(10,2);
startbutton.setSize(80,20);
startbutton.setLocation(147,350);
runinglabel.setSize(100,20);
runinglabel.setLocation(10,200); c.add(newpanel);
newpanel.add(namelabel);
newpanel.add(nametext);
newpanel.add(proritylabel);
newpanel.add(proritycom);
newpanel.add(timelabel);
newpanel.add(timetext);
newpanel.add(newbutton); readypanel.add(runingsp);
readypanel.add(readysp);
readypanel.add(readylabel);
readypanel.add(runinglabel);
readypanel.add(startbutton);
c.add(readypanel); jf.setSize(450,550);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
startbutton.addActionListener(new MyActionListener());
newbutton.addActionListener(new MyActionListener());
} class MyActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
}
public static void main(String[] args) {
new Main(); }}
本来想插入图片,不知道怎么弄,第一次发帖,勿喷……
大家给个建议参考一下吧。
import java.util.*;
import java.util.List;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;public class Main {
private JButton startbutton; //开始
private JButton newbutton; //新建 private JLabel namelabel;
private JLabel proritylabel;
private JLabel timelabel; private JLabel readylabel;
private JLabel runinglabel; private JTable readytable;
private JTable runingtable; private JTextField nametext;
private JTextField timetext;
private JComboBox proritycom; //优先级设置 private JPanel newpanel;
private JPanel readypanel;
private JScrollPane readysp;
private JScrollPane runingsp; Vector waitingvectorname; Pcb_Thread []readyarray;
Pcb_Thread []newarray;
List threadList = new LinkedList();
Object[][] readydata;
Object[][] runingdata; int first;
int end;
int count=0; //就绪队列中的进程数量
Pcb_Thread a;
Pcb_Thread test;
static int i=0;
final static int jt_timeout = 60*1000;//1分钟超时时间
public Main()
{
a=new Pcb_Thread();
first=0;
end=0;
JFrame jf=new JFrame("进程调度");
Container c=jf.getContentPane();
c.setLayout(null); newpanel=new JPanel();
newpanel.setLayout(null);
readypanel=new JPanel();
readypanel.setLayout(null); startbutton=new JButton("开始");
newbutton=new JButton("新建进程"); namelabel=new JLabel("进程名");
proritylabel=new JLabel("优先级");
timelabel=new JLabel("生存期");
readylabel=new JLabel("就绪队列");
runinglabel=new JLabel("运行进程"); nametext=new JTextField();
timetext=new JTextField();
proritycom=new JComboBox(); readyarray=new Pcb_Thread[8];
waitingvectorname=new Vector(); readydata=new Object[8][4];
runingdata=new Object[1][3]; String []col1={"进程","生存期","优先级","状态"};
String []col2={"进程","生存期","优先级"}; readytable=new JTable(readydata,col1);
readytable.setEnabled(false);
runingtable=new JTable(runingdata,col2);
runingtable.setEnabled(false); runingsp=new JScrollPane();
readysp=new JScrollPane();
readysp.getViewport().add(readytable);
runingsp.getViewport().add(runingtable);
runingtable.setRowHeight(22);
readytable.setRowHeight(22); for(int i=1;i<=10;i++)
proritycom.addItem(i); newpanel.setSize(450,100);
newpanel.setLocation(0,10);
namelabel.setSize(80,20);
namelabel.setLocation(10,5);
nametext.setSize(100,25);
nametext.setLocation(10,30); proritylabel.setSize(80,20);
proritylabel.setLocation(140,5);
proritycom.setSize(100,25);
proritycom.setLocation(140,30); timelabel.setSize(80,20);
timelabel.setLocation(280,5);
timetext.setSize(100,25);
timetext.setLocation(280,30);
newbutton.setSize(120,20);
newbutton.setLocation(140,80); readysp.setSize(400,100);
readysp.setLocation(10,30);
runingsp.setSize(400,43);
runingsp.setLocation(10,250); readypanel.setSize(450,410);
readypanel.setLocation(0,120);
readylabel.setSize(100,22);
readylabel.setLocation(10,2);
startbutton.setSize(80,20);
startbutton.setLocation(147,350);
runinglabel.setSize(100,20);
runinglabel.setLocation(10,200); c.add(newpanel);
newpanel.add(namelabel);
newpanel.add(nametext);
newpanel.add(proritylabel);
newpanel.add(proritycom);
newpanel.add(timelabel);
newpanel.add(timetext);
newpanel.add(newbutton); readypanel.add(runingsp);
readypanel.add(readysp);
readypanel.add(readylabel);
readypanel.add(runinglabel);
readypanel.add(startbutton);
c.add(readypanel); jf.setSize(450,550);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
startbutton.addActionListener(new MyActionListener());
newbutton.addActionListener(new MyActionListener());
timetext.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {// 通过键盘监听器实现控制文本框的输入内容
if ("0123456789".indexOf(e
.getKeyChar()) < 0)// 只允许输入字母和数字
e.consume();// 销毁此次键盘事件
}
});
}
class MyActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String pname = nametext.getText();
String pro = proritycom.getSelectedItem().toString();
String timeS = timetext.getText();
if(pname==null || pname.trim().equalsIgnoreCase("")){
JOptionPane.showMessageDialog(null, "请输入进程名!",
"友情提示", JOptionPane.INFORMATION_MESSAGE);
nametext.requestFocus();
return;
}
if(timeS==null || timeS.trim().equalsIgnoreCase("")){
JOptionPane.showMessageDialog(null, "请输入进程生存期!",
"友情提示", JOptionPane.INFORMATION_MESSAGE);
timetext.requestFocus();
return;
}
int pro_int = Integer.parseInt(proritycom.getSelectedItem().toString());
int timeS_int = Integer.parseInt(timetext.getText());
System.out.println("pro_int:"+pro_int);
try {
Pcb_Thread MsgThread = new Pcb_Thread(pname,pro_int,timeS_int,i++);
threadList.add(MsgThread);
//是否start这里要动动脑劲,加个循环什么的
//...要下班了....
MsgThread.start();
//
synchronized (MsgThread) {
MsgThread.wait(jt_timeout);
}
if (MsgThread.IsHangUp()) {
MsgThread.stop();
System.out.println("线程超时!");
return;
}
if (MsgThread.IsError()) {
System.out.println("线程运行时出错!");
return;
}
} catch (InterruptedException ex) {
System.out.println("线程被中止!");
return;
}
}
}
public static void main(String[] args) {
new Main(); }
}
private int m_threadID;
private int Running=1;
private int Ready=2;
private int Waiting=3;
private int runtime; //生存周期
private int processstate; //状态
private int pcbflag; //暂定
private boolean HangUp = true;
/** 是否出错 **/
private boolean Error = true;
private String ErrorMessage;
public Pcb_Thread(String name,int pro,int time,int id)
{
System.out.println("Create thread: " + id);
m_threadID=id;
this.setName(name);
this.setPriority(pro);
this.runtime=time;
}
public Pcb_Thread()
{
pcbflag=0;
}
public void setruntime(int time)
{
this.runtime=time; }
public int getruntime()
{
return runtime;
}
public void setprocessstate(int state)
{
this.processstate=state;
}
public String getprocessstate()
{
String s=new String();
if(this.processstate==1)
{
s="runing"; }
else if(this.processstate==2)
{
s="ready";
}
else if(this.processstate==3)
s="waiting";
return s; }
public boolean IsHangUp() {
return HangUp;
}
public boolean IsError() {
return Error;
} public String getError() {
return ErrorMessage;
}
public void run() {
System.out.println(getName( ) + " begins running.");
System.out.println(getName( ) + " : " + m_threadID + " with priority " + getPriority( ));
try
{
Thread.sleep(runtime * 1000);
}
catch ( InterruptedException ex )
{
System.err.println(ex.toString( ));
} // End of try/catch structure
finally {// 用来处理异常情况,用来声明一个肯定会被执行的块
System.out.println(getName( ) + " : " + m_threadID + " stops running.");
}
synchronized (this) {
HangUp = false;
this.notify();
}
}
}//要吃饭去了,还没有写完,楼主自己再补充点应该就可以了
还有我设置了生存期,每次运行进程后减一,结束后想优先级减半再按优先级顺序插入就绪队列中,不懂的怎么操作
还有那个循环怎么加还是不懂。
不好意思,麻烦您了……
{
public void actionPerformed(ActionEvent e)
{
String pname = nametext.getText();
String pro = proritycom.getSelectedItem().toString();
String timeS = timetext.getText();
Pcb_Thread MsgThread;
if(e.getSource()==newbutton){ //如果是创建按钮 if(pname==null || pname.trim().equalsIgnoreCase("")){
JOptionPane.showMessageDialog(null, "请输入进程名!",
"友情提示", JOptionPane.INFORMATION_MESSAGE);
nametext.requestFocus();
return;}
if(timeS==null || timeS.trim().equalsIgnoreCase("")){
JOptionPane.showMessageDialog(null, "请输入进程生存期!",
"友情提示", JOptionPane.INFORMATION_MESSAGE);
timetext.requestFocus();
return;
} int pro_int = Integer.parseInt(proritycom.getSelectedItem().toString());
int timeS_int = Integer.parseInt(timetext.getText());
System.out.println("pro_int:"+pro_int);
MsgThread = new Pcb_Thread(pname,pro_int,timeS_int,i++);
threadList.add(MsgThread);
}; if(e.getSource()==startbutton){ //如果是开始按钮
try{
Iterator<Pcb_Thread> it=threadList.iterator();
while(it.hasNext()){ //循环
MsgThread=it.next();
MsgThread.start();
synchronized (MsgThread) {
MsgThread.wait(jt_timeout); }
}
if(!it.hasNext())
{
System.out.println("time over");
}
}
catch(InterruptedException ex)
{return ; } } }
}尝试写了一下,结果就是运行后之后再次点击开始就不行了;
而且怎样在进程运行的时候, 创建一个新的进程插入到就绪队列中
private int m_threadID;
private int Running=1;
private int Ready=2;
private int Waiting=3;
private int runtime; //生存周期
private int pcbflag; //暂定
private Boolean timeOut = false;
private boolean HangUp = true;
/** 是否出错 **/
private boolean Error = true;
private String ErrorMessage;
public Pcb_Thread(String name,int pro,int time,int id)
{
System.out.println("Create thread: " + id);
m_threadID=id;
this.setName(name);
this.setPriority(pro);
this.runtime=time;
}
public Pcb_Thread()
{
pcbflag=0;
}
public void setruntime(int time)
{
this.runtime=time; }
public int getruntime()
{
return runtime;
} public boolean IsHangUp() {
return HangUp;
}
public boolean IsError() {
return Error;
} public String getError() {
return ErrorMessage;
}
public Boolean getTimeOut() {
return timeOut;
}
public void setTimeOut(Boolean timeOut) {
this.timeOut = timeOut;
}
public void run() {
Date d1= new Date( );
System.out.println(getName( ) + " begins running.");
System.out.println(getName( ) + " : " + m_threadID + " with priority " + getPriority( ));
System.currentTimeMillis();
try
{
while(!timeOut){
System.out.println(" Running thread: " + m_threadID);
Date d2= new Date( );
if(d2.getTime( ) - d1.getTime( ) > runtime*1000){
break;
}
Thread.sleep(1 * 1000);
// System.out.println("d2.getTime( ) - d1.getTime( ):"+(d2.getTime( ) - d1.getTime( )));
}
}
catch ( InterruptedException ex )
{
System.err.println(ex.toString( ));
} // End of try/catch structure
finally {// 用来处理异常情况,用来声明一个肯定会被执行的块
HangUp = false;
System.out.println(getName( ) + " : " + m_threadID + " stops running.");
}
// synchronized (this) {
// HangUp = false;
// this.notify();
// }
}
}
import java.util.*;
import java.util.List;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;public class MyMain extends Thread{
private JButton startbutton; //开始
private JButton newbutton; //新建 private JLabel namelabel;
private JLabel proritylabel;
private JLabel timelabel; private JLabel readylabel;
private JLabel runinglabel; private JTable readytable;
private JTable runingtable; private JTextField nametext;
private JTextField timetext;
private JComboBox proritycom; //优先级设置 private JPanel newpanel;
private JPanel readypanel;
private JScrollPane readysp;
private JScrollPane runingsp; Vector waitingvectorname; Pcb_Thread []readyarray;
Pcb_Thread []newarray;
private static Vector<Pcb_Thread> threadV = new Vector<Pcb_Thread>();
// Object[][] readydata;
// Object[][] runingdata;
private static Vector<Vector<Object>> readydata = new Vector<Vector<Object>>();
private static Vector<Vector<Object>> runingdata = new Vector<Vector<Object>>(); int first;
int end;
int count=0; //就绪队列中的进程数量
Pcb_Thread test;
static int i=0;
final static int jt_timeout = 60*1000;//1分钟超时时间
private static MyMain myMain;
private static Container c;
JFrame jf;
public MyMain()
{
first=0;
end=0;
jf=new JFrame("进程调度");
c=jf.getContentPane();
c.setLayout(null); newpanel=new JPanel();
newpanel.setLayout(null);
readypanel=new JPanel();
readypanel.setLayout(null); startbutton=new JButton("开始");
newbutton=new JButton("新建进程"); namelabel=new JLabel("进程名");
proritylabel=new JLabel("优先级");
timelabel=new JLabel("生存期");
readylabel=new JLabel("就绪队列");
runinglabel=new JLabel("运行进程"); nametext=new JTextField();
timetext=new JTextField();
proritycom=new JComboBox(); readyarray=new Pcb_Thread[8];
waitingvectorname=new Vector();// readydata=new Object[8][4];
// runingdata=new Object[1][3]; String[] col1={"进程","生存期","优先级","状态"};
String[] col2={"进程","生存期","优先级"};
Vector col1V= new Vector();
Vector col2V= new Vector();
for (int i = 0; i < col1.length; i++) {
col1V.add(col1[i]);
}
for (int i = 0; i < col2.length; i++) {
col2V.add(col2[i]);
}
readytable=new JTable(readydata,col1V);
readytable.setEnabled(false);
runingtable=new JTable(runingdata,col2V);
runingtable.setEnabled(false); runingsp=new JScrollPane();
readysp=new JScrollPane();
readysp.getViewport().add(readytable);
runingsp.getViewport().add(runingtable);
runingtable.setRowHeight(22);
readytable.setRowHeight(22); for(int i=1;i<=10;i++)
proritycom.addItem(i); newpanel.setSize(450,100);
newpanel.setLocation(0,10);
namelabel.setSize(80,20);
namelabel.setLocation(10,5);
nametext.setSize(100,25);
nametext.setLocation(10,30); proritylabel.setSize(80,20);
proritylabel.setLocation(140,5);
proritycom.setSize(100,25);
proritycom.setLocation(140,30); timelabel.setSize(80,20);
timelabel.setLocation(280,5);
timetext.setSize(100,25);
timetext.setLocation(280,30);
newbutton.setSize(120,20);
newbutton.setLocation(140,80); readysp.setSize(400,100);
readysp.setLocation(10,30);
runingsp.setSize(400,43);
runingsp.setLocation(10,250); readypanel.setSize(450,410);
readypanel.setLocation(0,120);
readylabel.setSize(100,22);
readylabel.setLocation(10,2);
startbutton.setSize(80,20);
startbutton.setLocation(147,350);
runinglabel.setSize(100,20);
runinglabel.setLocation(10,200); c.add(newpanel);
newpanel.add(namelabel);
newpanel.add(nametext);
newpanel.add(proritylabel);
newpanel.add(proritycom);
newpanel.add(timelabel);
newpanel.add(timetext);
newpanel.add(newbutton); readypanel.add(runingsp);
readypanel.add(readysp);
readypanel.add(readylabel);
readypanel.add(runinglabel);
readypanel.add(startbutton);
c.add(readypanel); jf.setSize(450,550);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
startbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
mystart();
}
});
newbutton.addActionListener(new MyActionListener());
timetext.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {// 通过键盘监听器实现控制文本框的输入内容
if ("0123456789".indexOf(e
.getKeyChar()) < 0)// 只允许输入字母和数字
e.consume();// 销毁此次键盘事件
}
});
}
class MyActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String pname = nametext.getText();
String pro = proritycom.getSelectedItem().toString();
String timeS = timetext.getText();
if(pname==null || pname.trim().equalsIgnoreCase("")){
JOptionPane.showMessageDialog(null, "请输入进程名!",
"友情提示", JOptionPane.INFORMATION_MESSAGE);
nametext.requestFocus();
return;
}
if(timeS==null || timeS.trim().equalsIgnoreCase("")){
JOptionPane.showMessageDialog(null, "请输入进程生存期!",
"友情提示", JOptionPane.INFORMATION_MESSAGE);
timetext.requestFocus();
return;
}
int pro_int = Integer.parseInt(proritycom.getSelectedItem().toString());
int timeS_int = Integer.parseInt(timetext.getText());
try {
Pcb_Thread MsgThread = new Pcb_Thread(pname,pro_int,timeS_int,i++);
threadV.add(MsgThread);
Vector v = new Vector();
v.add(pname);
v.add(timeS_int);
v.add(pro_int);
v.add(MsgThread.getState());
readydata.add(v);
SwingUtilities.updateComponentTreeUI(c);
} catch (Exception ex) {
ex.printStackTrace();
return;
}
}
}
//守护进程
public void run() {
Pcb_Thread a;
while(true){
// System.out.println("threadV.size():"+threadV.size());
for(int i=0,j=threadV.size(); i <j ; i++){
a = threadV.get(i);
if(a.isAlive()){
break;
}else if(a.getState().compareTo(State.TERMINATED)==0){
//
}else{
a.start();
updateCurrentThread(a);
break;
}
}
}
}
public static void main(String[] args) {
myMain = new MyMain();
}
public static void mystart(){
myMain.start();
}
public static void updateCurrentThread(Pcb_Thread t){
readydata.clear();
for(int i=0,j=threadV.size(); i<j; i++){
Pcb_Thread a = threadV.get(i);
Vector v = new Vector();
v.add(a.getName());
v.add(a.getruntime());
v.add(a.getPriority());
v.add(a.getState());
readydata.add(v);
}
Vector v = new Vector();
v.add(t.getName());
v.add(t.getruntime());
v.add(t.getPriority());
runingdata.clear();
runingdata.add(v);
SwingUtilities.updateComponentTreeUI(c);
}
}//说明: 上面的代码凑合可以跑,那个生存期单位为秒,输入3或者4等比较小的数字测试即可,
//要完善需要单独创建守护进程,可能要加一个类,楼主自己去想想办法吧
//测试前建意创建2~3个进程