首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

(FCFS)进程调度,

2012-06-06 
(FCFS)进程调度,求救……刚学java,各位帮忙添加一下我的代码,虽然有点长,但是要实现的功能不是很复杂,主要是

(FCFS)进程调度,求救……
刚学java,各位帮忙添加一下我的代码,虽然有点长,但是要实现的功能不是很复杂,主要是创建和启动进程(先来先服务算法)。而且界面方面已经实现。
主要问题是事件实现函数部分,不知道怎么写,怎么在创建进程完后,继续让进程运行……

最后:感激不尽……
第一类pcb

Java code
package 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;    }}


主类
Java code
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();    }} 


本来想插入图片,不知道怎么弄,第一次发帖,勿喷……
大家给个建议参考一下吧。


[解决办法]
package cn.daizhongde.test;

import javax.swing.*;
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个进程

热点排行