📄 processor.java~150~
字号:
/**
* 处理机类
*
*/
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableModel;
/**
* @author 阿赞
*
*/
public class Processor extends JPanel implements Runnable,ActionListener {
private String arithmetic = new String("FCFS_RR");
//private String arithmetic = new String("SPF");
private static int timeslice = 20;//时间片
private final static int pauseTime = 50;//一个单位的时间片对应的实际时间,单位为毫秒
BorderLayout borderLayout1 = new BorderLayout();
JTable jTable1 = new JTable();
JScrollPane jScrollPane1 = new JScrollPane();
Vector header ;
Vector data;
DefaultTableModel tableModel;
LinkedList PCBList_ready = new LinkedList();//就绪队列
LinkedList PCBList_wait = new LinkedList();//就绪队列
Thread thread = null;
//JPanel jPanel = new JPanel();
BorderLayout borderLayout2 = new BorderLayout();
JSlider jSlider1 = new JSlider();
JRadioButton jRadioButton1 = new JRadioButton("先来先服务",true);
//JRadioButton jRadioButton1 = new JRadioButton("先来先服务");
JRadioButton jRadioButton2 = new JRadioButton("短进程优先");
//JRadioButton jRadioButton2 = new JRadioButton("短作业优先",true);
ButtonGroup Dispatching = new ButtonGroup();
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
JPanel jPanel3 = new JPanel();
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
BorderLayout borderLayout3 = new BorderLayout();
GridLayout gridLayout1 = new GridLayout(2,1);
Memory m = null;
public Processor(Memory memory) {//构造方法
this.m = memory;
this.setLayout(new BorderLayout());
//this.setSize(600,400);
try {
jbInit();
}
catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
//getContentPane().setLayout(borderLayout1);
//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//this.setVisible(true);
jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
jPanel1.setPreferredSize(new Dimension(120, 10));
jPanel1.setLayout(borderLayout2);
jSlider1.setOrientation(JSlider.VERTICAL);
jSlider1.setMinimum (0);//设置最小值
jSlider1.setMaximum (100);//设置最大值
jSlider1.setMajorTickSpacing (10);//设置主标号间隔
jSlider1.setMinorTickSpacing (5);//设置辅标号间隔
//设定为显示
jSlider1.setPaintTicks(true);
jSlider1.setPaintLabels(true);
//jSlider1.setPaintTrack (true);
jSlider1.setValue (20);//设置初始值
jSlider1.setUI(new javax.swing.plaf.metal.MetalSliderUI() {// 使用MetalSliderUI为ui
protected void paintHorizontalLabel(Graphics g, int v, Component l) {
JLabel lbl = (JLabel) l;
lbl.setForeground(Color.GREEN);
super.paintHorizontalLabel(g, v, lbl);
}
});
jSlider1.setForeground(Color.BLUE);
jLabel2.setText(" 时间片大小 : "+jSlider1.getValue());
ChangeListener listener = new ChangeListener() {//注册ChangeListener事件
public void stateChanged(ChangeEvent e) {
if (e.getSource() instanceof JSlider) {
jLabel2.setText(" 时间片大小 : "+ ((JSlider) e.getSource()).getValue());
timeslice = jSlider1.getValue();
}
}
};
jSlider1.addChangeListener(listener);//监听jSlider1
jPanel3.setLayout(borderLayout3);
jPanel2.setLayout(gridLayout1);
jPanel2.setPreferredSize(new Dimension(206, 40));
//this.getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
//this.getContentPane().add(jPanel1, java.awt.BorderLayout.WEST);
add(jPanel1, java.awt.BorderLayout.WEST);
add(jScrollPane1, java.awt.BorderLayout.CENTER);
add(jLabel1, java.awt.BorderLayout.SOUTH);
jLabel1.setText("处理机空闲");
jLabel1.setHorizontalAlignment(JLabel.CENTER);
jLabel1.setFont(new Font("Dialog",0,30));
//jLabel1.setBackground(Color.GREEN);//设置标签颜色
jLabel1.setForeground(Color.GREEN);//设置字体颜色
jLabel1.setBorder(BorderFactory.createEtchedBorder());//设置标签边框
jLabel1.setOpaque(true); //让组件变为不透明使标签颜色显示出
jScrollPane1.getViewport().add(jTable1);
jPanel1.add(jPanel3, java.awt.BorderLayout.CENTER);
jPanel1.add(jPanel2, java.awt.BorderLayout.NORTH);
jPanel2.add(jRadioButton2);
jPanel2.add(jRadioButton1);
jPanel3.add(jSlider1, java.awt.BorderLayout.CENTER);
jPanel3.add(jLabel2, java.awt.BorderLayout.SOUTH);
Dispatching.add(jRadioButton1);
Dispatching.add(jRadioButton2);
jRadioButton1.addActionListener(this);
jRadioButton2.addActionListener(this);
SetTable_FCFS();//在容器中添加JTable表格的表头
thread = new Thread(this);//创建线程
thread.start();//启动线程执行
}
public PCB Create_Ready(String id,int size,int memoryID[]) {//创建就绪进程
PCB pcb = new PCB(id,size,memoryID);
PCBList_ready.add(pcb);//将新创建的进程控制块加到就绪队列的队尾
return pcb;
}
public PCB Create_Wait(String id,int size,int memoryID[]) {//创建等待进程
PCB pcb = new PCB(id,size,memoryID);
PCBList_wait.add(pcb);//将新创建的进程控制块加到等待队列的队尾
return pcb;
}
private void SetTable_FCFS() {//设置先来先服务的JTable表格的表头
header = new Vector();
header.addElement("进程ID");
header.addElement("进程状态");
header.addElement("需要处理机时间");
header.addElement("已占用处理机时间");
tableModel = new DefaultTableModel(header, 0);
jTable1.setModel(tableModel);
}
private void SetTable_SPF() {//设置短进程优先的JTabel表格的表头
header = new Vector();
header.addElement("进程ID");
header.addElement("进程状态");
header.addElement("需要处理机时间");
//header.addElement("已占用处理机时间");
tableModel = new DefaultTableModel(header, 0);
jTable1.setModel(tableModel);
}
public void actionPerformed(ActionEvent e) {//JRadioButton的事件响应
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -