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

📄 opration.java

📁 注意: 1. OS.jar为Java打包可执行文件 2. 由于时间,和界面空间问题,每个进程的资源拥有情况没有详细列明.如果要认真检查 程序的正确性,可以重新编译运行,然后查看Dos界 面下的输出.因
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
       String cmd = e.getActionCommand(); 
       if(e.getActionCommand().equals("Exit"))
          System.exit(0); 
      
    else if(e.getActionCommand().equals("Copy")) 
    { JOptionPane.showMessageDialog(this.getParent(),"对不起!\n该功能尚未添加");	 
    } 
      
   else if(e.getActionCommand().equals("Paste")) 
    {  JOptionPane.showMessageDialog(this.getParent(),"对不起!\n该功能尚未添加"); 
    }
      
      else if(e.getActionCommand().equals("开始/停止"))
            {   if(ReSource.Control==0)
                 {ReSource.Control=1;
                  Result.setText("     系统正在重新启动  ");
                  request.setText("  系统正随机产生资源请求");
                   SetResource.setEnabled(false); 
                  ReStart.setEnabled(false); 
                }
              else if(ReSource.Control==1)
                 { ReSource.Control=0; 
                   Result.setText(Result.getText()+"    (系统已停止运行)"); 
                   SetResource.setEnabled(true); 
                 }  
                 
               if(Con==0)
                { M=10;
                  N=15;	
                  int length=Que.QueueLength;
                  for(int i=0;i<length;i++)
                   { Que.OutQueue(0); 
                     PN--;
                    }
        
                for(int i=0;i<N;i++)   //随机生成新进程加入进程队列
                  {  Process P=new Process(); 
                 	 Que.InQueue(P); 
                  }  
                }   
               Con=1;  
             } 
      
       else if(e.getActionCommand().equals("ReStart"))
       { 
        Time=0;
        ReStart.setEnabled(false);
        Start.setEnabled(true);
       	SetResource.setEnabled(false); 
       	ReSource.Control=1;
       	quitList.setText("暂无进程出队");
       	request.setText("已重新开始  暂无手动请求 可以手动请求");
       }   
             
     else if(e.getActionCommand().equals("设置资源和进程数")) 
     {  N=Integer.parseInt(PNo.getText());
        M=Integer.parseInt(RNo.getText());
        if(M<=20 && N<=100)
        {
        
        
        int length=Que.QueueLength;
        for(int i=0;i<length;i++)
        { Que.OutQueue(0); 
          PN--;
        }
         PN=0;
         for(int i=0;i<N;i++)     //随机生成新进程加入进程队列
        { Process P=new Process(); 
        	Que.InQueue(P); 
        }  
        
         for(int j=0;j<M;j++)     //初始化可用资源资源数目    
         { Available[j]=maxRS;
   	       Work[j]=maxRS;
         } 
         
         Con=2; 
         request.setText("已设置成功,请按 ReStart");
         ReStart.setEnabled(true); 
         Start.setEnabled(false); 
      }
      else  request.setText(" 设置失败,请按重新设置 (进程数最大为100,资源数最大为20) ");
      	     
      
      
     }        
        
    else if(e.getActionCommand().equals("Help"))   
    {JOptionPane.showMessageDialog(this.getParent(),"首先输入预定进程数和资源数 \n再按 设置资源和进程数 键可进行设定\n按开始 则系统开始工作\n查看Dos界面可得到进程拥有资源状态\n    --Cheng ");     	
    }  
    
   else if(e.getActionCommand().equals("Brief")) 
    { JOptionPane.showMessageDialog(this.getParent(),"本程序为银行家算法的实现"); 
    }   
                
    else if(e.getActionCommand().equals("添加请求"))   
      {   if(Integer.parseInt(ResourceNumber.getText())>M) 
             { request.setText("  无 "+ResourceNumber.getText()+"   类资源"); 
             }    
           
          else  
          {
      
               Request ReQ=new Request();
               ReQ.Pnumber=Integer.parseInt(ProcessNumber.getText());
               for(int i=0;i<QueueLength();i++)
                 { if(Que.ProQueue[i].ProcessNumber==ReQ.Pnumber)
                      {ReQ.Pnumber=i;kk=1;break;}
                 }
                
         	      ReQ.ResourceNumber=Integer.parseInt(ResourceNumber.getText());
         	      ReQ.Request=Integer.parseInt(RequestNumber.getText());  
         	   if(kk==1)
         	   { String message=new String(" 进程"+Que.ProQueue[ReQ.Pnumber].ProcessNumber+" 申请 "+ReQ.ResourceNumber+"类资源"+ ReQ.Request+" 个");
         	     System.out.println(message);
         	     request.setText(message+"      "+bankerAssign(ReQ)); 
              	 finishAndQuit();
               }
               else
                 { System.out.println(" 进程"+ ReQ.Pnumber+"不存在"); 
                   request.setText(" 进程"+ ReQ.Pnumber+"不存在");
                 } 
        	}  
        }
	} 
	
 private void Start(Timer atimer,ReSource Re)	 
 {   atimer = new Timer();  
 	 atimer.scheduleAtFixedRate(Re,0,3000);  
 } 	
	
  private void initTextPanel()
  { TextPanel = new JPanel();
    TextPanel.setLayout(new GridLayout(2,8,1,1));  
 
   	Pnumber=new JLabel("  设定进程数");
   	 TextPanel.add(Pnumber); 
   	 Pnumber.setFont(font);
  	
  	PNo= new JTextField("15");
  	TextPanel.add(PNo);  
  	
  	Rnumber=new JLabel("  设定资源数");
    TextPanel.add(Rnumber);
    Rnumber.setFont(font);
  	
    RNo= new JTextField("10");
  	TextPanel.add(RNo);  
 
    JLabel ber=new JLabel(" 设置请按-->");
    ber.setFont(font);
    TextPanel.add(ber);  
 
    SetResource=new JButton("设置");
    SetResource.setFont(new Font("宋体",Font.BOLD,14));
    SetResource.setActionCommand("设置资源和进程数");
    SetResource.addActionListener(this); 
    SetResource.setFont(font);
    TextPanel.add(SetResource); 
    
    Plabel=new JLabel("  请求进程号");
    TextPanel.add(Plabel);
    Plabel.setFont(font);
    
  	ProcessNumber= new JTextField("0"); 
  	TextPanel.add(ProcessNumber); 
  	
    Rlabel=new JLabel("  请求资源号");
    TextPanel.add(Rlabel);
    Rlabel.setFont(font);
  	
  	ResourceNumber= new JTextField("0");
  	TextPanel.add(ResourceNumber);
  	
    rlabel=new JLabel("       请求数");
    TextPanel.add(rlabel); 
    rlabel.setFont(font);
  	
  	RequestNumber= new JTextField("0");
  	TextPanel.add(RequestNumber); 
 }	
	
  private void initListPanel()
   { String colorNames[]={};
  	ListPanel = new JPanel();
    ListPanel.setLayout(new FlowLayout()); 
    
  	ResourceList = new JList(colorNames);
    ResourceList.setVisibleRowCount(10);
    
    ResourceList.setFixedCellHeight(20);
    ResourceList.setFixedCellWidth(180);
    ResourceList.setFont(font);
    ResourceList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
  	ListPanel.add(ResourceList,BorderLayout.WEST);
   	ListPanel.add(new JScrollPane(ResourceList)); 
  	
  	ProcessList=new JList(colorNames);
  	ProcessList.setVisibleRowCount(10);
    ProcessList.setFixedCellHeight(20);
    ProcessList.setFixedCellWidth(130);
    ProcessList.setFont(font);
    ProcessList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    ListPanel.add(ProcessList,BorderLayout.EAST); 
    
    ListPanel.add(new JScrollPane(ProcessList)); 
   }
   
  private void initKeyPanel()
  { KeyPanel = new JPanel();
    KeyPanel.setLayout(new FlowLayout()); 
    addRequest=new JButton("添加请求");
 	addRequest.setFont(new Font("宋体",Font.BOLD,14));
    addRequest.setActionCommand("添加请求");
    addRequest.setFont(font);
    addRequest.addActionListener(this); 
    
    Start=new JButton("开始/停止");
    Start.setFont(new Font("宋体",Font.BOLD,14));
    Start.setActionCommand("开始/停止");
    Start.setFont(font);
    Start.addActionListener(this);
    
    ReStart=new JButton("ReStart");
    ReStart.setFont(new Font("宋体",Font.BOLD,14));
    ReStart.setActionCommand("ReStart");
    ReStart.setFont(font);
    ReStart.setEnabled(false);
    ReStart.addActionListener(this); 
    
    request=new  JTextField("暂无手动请求  (可从上面输入预定进程数合资源数设定)");
    request.setColumns(33);
    request.setEditable(false);
    request.setBackground(Color.WHITE);
    
    Result=new  JTextField("暂未开始 请按开始键运行 (运行结果)");
    Result.setColumns(33);
    Result.setEditable(false);
    Result.setBackground(Color.WHITE);
    
     quitList=new JTextField("暂无进程出队");
     quitList.setColumns(33);
     quitList.setEditable(false);
     quitList.setBackground(Color.WHITE);
   
   	 KeyPanel.add(Start);
   	 KeyPanel.add(ReStart);
   	 KeyPanel.add(addRequest); 
   	 KeyPanel.add(request);
   	 KeyPanel.add(Result);
  	 KeyPanel.add(quitList); 
   }  
   
  public void SetList(String Str[]) 
  { ResourceList.setListData(Str); 
  }  
  
   public void SetProcessList(String Str[])
  { ProcessList.setListData(Str); 
  }  
 
  public void Result(String Str)
  { Result.setText(Str);
  } 
   	 	
  public void quitList(String Str)
  { quitList.setText(Str);
  } 	
 
  public void StartDisable()
  { 	Start.setEnabled(false); 
  } 	
	private void createMenu()
  { JMenuItem item; 
    fileMenu = new JMenu("Edit");  // 创建编辑菜单 
    item = new JMenuItem("Copy");  // 创建菜单项Copy
    item.addActionListener(this);
    fileMenu.add(item);            // 将菜单项安装到菜单 
    item = new JMenuItem("Paste"); // 创建菜单项Paste 
    item.addActionListener(this);
    fileMenu.add(item);            // 将菜单项安装到菜单 
    fileMenu.addSeparator();       // 为菜单添加分隔线 
    item = new JMenuItem("Exit");  // 创建菜单项Exit
    item.addActionListener(this);
    fileMenu.add(item);            // 将菜单项安装到菜单 
    menuBar = new JMenuBar();      // 创建菜单条
    menuBar.add(fileMenu);         // 将菜单添加到菜单条 
    this.setJMenuBar(menuBar);     // 将菜单条安装到窗口
    typeMenu=new JMenu("Help");    // 创建类型选择菜单 
     item = new JMenuItem("Help");  // 创建菜单项Help
     item.addActionListener(this);
    typeMenu.add(item);             // 将菜单项安装到菜单 
    item = new JMenuItem("Brief");  // 创建菜单项Brief
     item.addActionListener(this);
    typeMenu.add(item);             // 将菜单项安装到菜单  
    menuBar.add(typeMenu); 
  }  
 } 
} 

class Timers 
{  public static void main(String[] args) 
  {  Timer atimer = new Timer();  
     atimer.scheduleAtFixedRate(new ReSource(),0,3000); 
   } 
}

⌨️ 快捷键说明

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