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

📄 os.java

📁 处理及调度算法模拟 模拟几种不同的处理机调度算法
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package OSpackage;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import javax.swing.table.*;
public class Os extends JFrame implements ActionListener,ItemListener{
	
	static JFrame frame1,frame2;
	private JLabel label[];
	private JLabel labelk;
	private JTextField fieldk;
	private JTextField field[];
    TJ tj[];
    TJ tj1;
    static int first=1,way=0,way2=0,aj=0,bj=0;
	  int systemTime=0;
	  static float result1=0,result2=0;
    JRadioButton jb1,jb2,jb3;
    ButtonGroup BG;
	int a[],b[];
	private JButton buttonk,button[];
	private int K;
	static int m=1;
	private JTable table;
	JScrollPane panel_2;
   	DefaultTableModel modle;
	static Vector rowData,columnNames ,work,job,current,current1;
	public  Os(){
		 new WelcomeWindow("E:/myjava/3.JPG",10000000);
		frame1=new JFrame("作业总数");
		Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize(); 
		buttonk=new JButton("  O  K  ");
		buttonk.addActionListener(this);
		labelk=new JLabel(" 请输入总的作业个数:",SwingConstants.CENTER);
		fieldk=new JTextField(10);
		frame1.setLayout(new FlowLayout(FlowLayout.CENTER));
		labelk.setForeground(Color.RED);
    	labelk.setFont(new Font("TimeRoman",Font.ITALIC,18));
		frame1.add(labelk);
		frame1.add(fieldk);
		frame1.add(buttonk);
		frame1.setSize(200,140);
		Dimension frame1Size=frame1.getPreferredSize();
		System.out.println(screenSize);
		System.out.println(frame1Size);
		frame1.setLocation( screenSize.width/2-(100),screenSize.height/2-(70));
		frame2=new JFrame("作业信息");
		label=new JLabel[8];
		field=new JTextField[8];
		label[0]=new JLabel("请在文本框中输入信息,并点击提交按钮",JLabel.CENTER);
		label[0].setForeground(Color.RED);
		label[0].setFont(new Font("TimeRoman",Font.ITALIC,30));
		Container c=frame2.getContentPane();
		JPanel lowerPanel=new JPanel(new FlowLayout(FlowLayout.CENTER));
		JPanel centerPanel=new JPanel(new FlowLayout(FlowLayout.LEFT));
		c.setLayout(new GridLayout(4,1));
		lowerPanel.add(label[0]);
		frame2.setLocation( screenSize.width/2-(300),screenSize.height/2-(150));
		frame2.add(lowerPanel);
		frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame2.setResizable(false);
	    jb1=new JRadioButton("先来先服务",false);
	    jb1.addItemListener(this);
	    jb2=new JRadioButton("短作业优先",false);
	    jb2.addItemListener(this);
	    jb3=new JRadioButton("高响应比优先",false);
	    jb3.addItemListener(this);
	    BG=new ButtonGroup();
	    BG.add(jb1);
	    BG.add(jb2);
	    BG.add(jb3);
	    lowerPanel.add(jb1);
	    lowerPanel.add(jb2);
	    lowerPanel.add(jb3);
		frame2.setSize(600,400);
		lowerPanel.add(new JLabel("                "));
	    label[2]=new JLabel("  作业提交时间:");
		label[2].setFont(new Font("TimeRoman",Font.ITALIC,20));
		centerPanel.add(label[2]);
		field[1]=new JTextField(10);
		field[1].setForeground(Color.RED);
		centerPanel.add(field[1]);
	    label[2]=new JLabel("      预计运行时间:");
		label[2].setFont(new Font("TimeRoman",Font.ITALIC,20));
		centerPanel.add(label[2]);
		frame2.add(centerPanel);
		field[2]=new JTextField(10);
		field[2].setForeground(Color.RED);
		centerPanel.add(field[2]);
		button=new JButton[6];
		centerPanel.add(new JLabel("                          "));
		button[0]=new JButton("提  交");
		button[0].addActionListener(this);
		button[0].setFont(new Font("TimeRoman",Font.ITALIC,20));
		centerPanel.add(button[0]);
		centerPanel.add(new JLabel("                                                                           "));
		button[1]=new JButton("取  消");
		button[1].addActionListener(this);
		button[1].setFont(new Font("TimeRoman",Font.ITALIC,20));
		centerPanel.add(button[1]);
		job=new Vector(100);
		current=new Vector(100);
		current1=new Vector(100);
		rowData=new Vector(100);
		columnNames=new Vector(100);
		work=new Vector(100);
	    work.addElement("作业号");
	    work.addElement("提交时间");
	    work.addElement("预计运行时间");
		columnNames.addElement("调度次序");
		columnNames.addElement("作业号");
		columnNames.addElement("调度时间");
		columnNames.addElement("周转时间");
		columnNames.addElement("带权周转时间");
		modle= new DefaultTableModel(rowData,columnNames);
		modle.setDataVector(rowData,work);
		table=new JTable(modle);
		table.setFont(new Font("TimeRoman",Font.ITALIC,17));
		table.setForeground(Color.red);
		table.setRowHeight(25);
		panel_2= new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		panel_2.setBorder(BorderFactory.createLineBorder(Color.RED));
		frame2.add(panel_2);
		JPanel lastPanel=new JPanel(new FlowLayout());
		c.add(lastPanel);
		button[2]=new JButton("显  示");
		button[2].setFont(new Font("TimeRoman",Font.ITALIC,20));
		button[2].addActionListener(this);
		lastPanel.add(button[2]);
		lastPanel.add(new JLabel("                      "));
	    button[4]=new JButton(" N E X T ");
		button[4].setFont(new Font("TimeRoman",Font.ITALIC,20));
		button[4].addActionListener(this);
		lastPanel.add(button[4]);
		lastPanel.add(new JLabel("                      "));
	    button[3]=new JButton("打  开");
		button[3].setFont(new Font("TimeRoman",Font.ITALIC,20));
		button[3].addActionListener(this);
		lastPanel.add(button[3]);
	    label[3]=new JLabel("  平均周转时间   ");
		label[3].setFont(new Font("TimeRoman",Font.ITALIC,20));
		lastPanel.add(label[3]);
		field[3]=new JTextField(10);
		field[3].setForeground(Color.RED);
		field[3].setEditable(false);
		lastPanel.add(field[3]);		
	    label[4]=new JLabel("  平均带权周转时间  ");
		label[4].setFont(new Font("TimeRoman",Font.ITALIC,20));
		lastPanel.add(label[4]);
		field[4]=new JTextField(10);
		field[4].setForeground(Color.RED);
		field[4].setEditable(false);
		lastPanel.add(field[4]);
	}
	/******************************************/public //定义一个内部类
class WelcomeWindow extends JWindow{//welcome window.
 public WelcomeWindow(String filename,int waitTime){
  //super(f);
  JLabel l = new JLabel(new ImageIcon(filename));//image add to label l
  getContentPane().add(l, BorderLayout.CENTER);
  pack();
  Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize();
  Dimension labelSize = l.getPreferredSize();
  setLocation(screenSize.width/2 - (labelSize.width/2),screenSize.height/2 - (labelSize.height/2));



//press the welcome window,it will be closed. 
  addMouseListener(new MouseAdapter(){
   public void mousePressed(MouseEvent e){
    setVisible(false);
    dispose();
    frame1.setVisible(true);
   }
  });


  final int pause = waitTime;
  final Runnable closerRunner = new Runnable(){
   public void run(){
    setVisible(false);
    dispose();
   }
  };


  Runnable waitRunner = new Runnable(){
   public void run(){
    try{
     Thread.sleep(pause);
     //invoke closerRunner and wait for waitRunner run.
     SwingUtilities.invokeAndWait(closerRunner);
    }catch(Exception e){
     e.printStackTrace();
     // Catch InvocationTargetException
     // Catch InterruptedException
    }
   }
  };


  setVisible(true);
  Thread waitThread = new Thread(waitRunner, "SplashThread");
  waitThread.start();
 }
 }

	public void Remove()//移除原有的,用于刷新表格 不知道为什么总是有越界的错误
   	{
   		int j= modle.getRowCount();
   		
   		do{
   			modle.removeRow(j-1);
   			j--;
   		  }while(modle.getRowCount()!=0);
   		
   	}
	public int zhuanD(String a)//转化为分钟进行运算
	{
		int hour=Integer.parseInt(a.substring(0,2))*60;
		int minute=Integer.parseInt(a.substring(2,4));
		return hour+minute;
	}
	public String zhuanH(int a)//转化为时间
	{
	    String minute;
		String hour=a/60+"";
		if(a%60==0)
	 minute=a%60+"0";
		else
	 minute=a%60+"";
		return hour+":"+minute;
	}
	public TJ duixiang(TJ tj[],int a)
	{
		   for(int i=0;i<tj.length;i++)
		    {
			if(Integer.parseInt(tj[i].getTime())==a)
				return tj[i];
		    } 
			 return null;
    }
	
		

	public TJ duixiang_b(TJ tj[],int a)
	{

		   for(int i=0;i<tj.length;i++)
		    {
			if(Integer.parseInt(tj[i].getRuntime())==a)
				return tj[i];
		    }
		   return null;
	}
	public void pai(TJ tj[],int a[],int b[])//依据调度时间和到达时间排序
	{
		int i,k,tempa,tempb;
		for(int j=0;j<tj.length;j++)
		{
			a[j]=Integer.parseInt(tj[j].getTime());
			b[j]=Integer.parseInt(tj[j].getRuntime());
		}

			for(i=1;i<=a.length;i++)
				for(k=0;k<=a.length-i-1;k++)
			{
					if(a[k]>a[k+1])
				{
					tempa=a[k];
					a[k]=a[k+1];
					a[k+1]=tempa;		
				}
					if(a[k]==a[k+1])
					{
						int h1=Integer.parseInt(duixiang(tj,a[k]).getTime());
						int h2=Integer.parseInt(duixiang(tj,a[k+1]).getTime());
						if(h1>h2)
						{
							String aa=duixiang(tj,a[k]).getTime();
							duixiang(tj,a[k]).setRuntime(duixiang(tj,a[k+1]).getTime());
							duixiang(tj,a[k]).setRuntime(aa);
						}
					}
			}
		
		{
			for(i=1;i<=b.length;i++)
				for(k=0;k<=b.length-i-1;k++)
					if(b[k]>b[k+1])
				{
					tempb=b[k];
					b[k]=b[k+1];
					b[k+1]=tempb;		
				}
		}
		for(i=0;i<b.length;i++)
		{
	
			current.addElement(duixiang_b(tj,b[i]));
		}
		current1=current;
	}
	/*public void result(int a[])
	{
		  float dai;
		  float zhou;
		  for(int j=0;j<a.length;j++)
		  {
			  tj1=duixiang(tj,a[j]);//得到当前的符合条件的对象
			 if(j==0)
			 {
				
				 String zh1=tj1.getRuntime()+"分钟";
				 Object data[]={
				  j+1,tj1.getM(),zhuanH(zhuanD(tj1.getTime()))
				  ,zh1,1};
		          modle.addRow(data);
		          systemTime=systemTime+zhuanD(tj1.getTime())+
		          Integer.parseInt(tj1.getRuntime());//系统当前时间为多少
		          result2=1;
		          result1=Integer.parseInt(tj1.getRuntime());

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -