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

📄 processor.java~150~

📁 操作系统课程设计
💻 JAVA~150~
📖 第 1 页 / 共 2 页
字号:
/**
 * 处理机类
 *
 */

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 + -