java实现银行家算法(Swing界面)

java代码实现了银行家算法,界面写的个人认为还是较为细致的,完整的实现了找安全序列等算法功能,可作为参考学习银行家算法。

直接上代码:①界面展示方法:

public void ShowFrame()
 {
       this.setSize(500, 350);  //大小
       this.setAlwaysOnTop(true);
       this.setResizable(false);//不可拖动
       this.setLayout(new BorderLayout());
       this.setTitle("lly_banktest");

       jp1=new JPanel();
       String s[]= {"Allocation","Max","Available","Request"};
       jcb1=new JComboBox(s);
       jp1.add(jcb1);
       jp1.add(new JLabel("PID:"));
       jtf1=new JTextField(3);
       jp1.add(jtf1);
       jp1.add(new JLabel("A:"));
       jtf2=new JTextField(3);
       jp1.add(jtf2);
       jp1.add(new JLabel("B:"));
       jtf3=new JTextField(3);
       jp1.add(jtf3);
       jp1.add(new JLabel("C:"));
       jtf4=new JTextField(3);
       jp1.add(jtf4);
       jb1=new JButton("确定");
       jp1.add(jb1);
       jb1.addActionListener(this);
       this.add(jp1,"South");
        jta1= new JTextArea();      //显示文件本域
        ShowData();           //显示数据
        jta1.setLineWrap(true);      //自动适应
        int r,g,b;
        jta1.setBackground(Color.white);
        jta1.setEditable(false);
        this.add(jta1,"Center");
       // Font f=new Font("Dialog",Font.BOLD,12);  //
        jp1.setBackground(new java.awt.Color(128,255,128));
 }
 public void ShowData(){
    jta1.setText(" Max \tAllocation       Need    \tAvailable\n");
    jta1.append("\n"+"  资源:  " + " A    B   C     " +"   A    B   C  " +
          "    A    B   C  " +"    A    B   C");
    jta1.append("\n  进程\n   "+pname[0]+"     " +
              +Max[0][0]+"    "+Max[0][1]+"   "
              +Max[0][2]+"     " +
                 "   "+Allocation[0][0]+"    "+Allocation[0][1]
           +"    "+Allocation[0][2]+"  " +
                 "     "+Need[0][0]+"    "+Need[0][1]
           +"   "+Need[0][2]+"  " +
                 "    "+Available[0]+"    "+Available[1]+
                 "   "+Available[2]);
    for(int i=1;i<5;i++)
    {
    jta1.append("\n\n   "+pname[i]+"  " +
          "   "+Max[i][0]+"    "+Max[i][1]+"   "+Max[i][2]+"     " +
              "   "+Allocation[i][0]+"    "+Allocation[i][1]
        +"    "+Allocation[i][2]+"  " +
              "     "+Need[i][0]+"    "+Need[i][1]
        +"   "+Need[i][2]+"  " );
    }
    jtf1.setText("");
    jtf2.setText("");
    jtf3.setText("");
    jtf4.setText("");

 }

截图:

②算法实现代码:

public void myAllocation(int i)  //分配资源
 {
   for (int j=0;j<sno;j++)
  {
  Available[j]=Available[j]-Request[j];
  Allocation[i][j]=Allocation[i][j]+Request[j];
  Need[i][j]=Need[i][j]-Request[j];
  }
 }

 public boolean judge(int i, int Request[] )  //初步检查是否有足够资源
 {
    boolean choice=false;
    for(int j=0;j<sno;j++){
     if(Request[j]>Need[i][j])
     break;
     if(Request[j]>Available[j])
     break;
     else choice=true;
    }
    return choice;
 }

 public boolean SaftyCheck(int p)    //安全性检查
 {
  int k = 0;
  boolean b=true;
  Work=new int[sno];    //定义工作向量并赋初值
  Finish=new boolean[pno];
  for(int i=0;i<sno;i++)
  {
   Work[i]=Available[i];
  }
  for(int i=0;i<pno;i++)
  Finish[i]=false; //初值为false
  Finish[p]=true; //初次检查
  for(int j=0;j<sno;j++)//释放资源
  {
  Work[j]=Work[j]+Allocation[p][j];
  }
  temp[k++]=p;
  boolean found = false;//标记是否找到安全进程 

  while(k<pno-1){    //遍历查找安全序列
  for(int i=0;i<pno;i++)
   {
      boolean flag=true;//标记是否有足够资源
     if(Finish[i]) continue ;
     for(int j=0;j<sno;j++)
     {
      if(Need[i][j]>Work[j])  //资源不足,退出
      {
         flag=false;
        break;
         }
        }
     if(flag) //找到资源
        {
       temp[k++]=i;//存储安全序列
        Finish[i]=true;
        found=true;
        for(int j=0;j<sno;j++)//释放资源
         Work[j]=Work[j]+Allocation[i][j];
        }
     }
    if(found)
    {
   found=false;
    }
    else break;//遍历,试分配失败跳出
  }

  for(int i=0;i<pno;i++){  //若存在false,则跳出
     if(!Finish[i])
      {
         b=false;
         break;
        }
  }
  return b;
 }

截图:

③事件响应函数:

public void actionPerformed(ActionEvent e) {
//事件响应函数
    if(e.getSource()==jb1){//按下“确定”
       if(jcb1.getSelectedItem()=="Request"){
       int p=0;
    try{
       p=Integer.parseInt(jtf1.getText());
       Request[0]=Integer.parseInt(jtf2.getText());
       Request[1]=Integer.parseInt(jtf3.getText());
       Request[2]=Integer.parseInt(jtf4.getText());
    }catch(Exception d)
    {
        JOptionPane.showMessageDialog(this, "您输入有误!请重新输入!");
        ShowData();
        return;
    }
    if(p>4) //限定输入进程ID范围
        {
        JOptionPane.showMessageDialog(this, "PID在0-4之间!");
        jtf1.setText("");
        return;
        }
       if(judge(p,Request))//初步分配检查
       {
           if(SaftyCheck(p)){//安全性检查
             ShowData();
               jta1.append("\n\n 通过安全性检查!安全序列为:");
               for(int i=0;i<pno;i++)//打印安全序列
               jta1.append("P"+String.valueOf(temp[i])+" ");
               jta1.append(" 批准请求,资源已分配!");
               myAllocation(p);//检查到安全序列才分配
           }else //不安全
              {
             ShowData();
                  //jta1.append("\n\n  找不到安全序列!  不批准请求!");
                  JOptionPane.showMessageDialog(this, "找不到安全序列!  不批准请求!");
              }
       }else{
         ShowData();
           jta1.append("\n\n 系统资源不足!");
       }
    }
   /***
    * 选择avaliable时!
    */

    else if(jcb1.getSelectedItem()=="Available"){//设置可用资源
       try{
           Available[0]= Integer.parseInt(jtf2.getText());
           Available[1]=Integer.parseInt(jtf3.getText());
           Available[2]=Integer.parseInt(jtf4.getText());
    }catch(Exception d)
    {
        JOptionPane.showMessageDialog(this, "您输入有误!请重新输入!");
        ShowData();
        return;
    }
      ShowData();
      jta1.append("\n\n  可用资源设置成功!");
    }

       /**
    * 选择Max时!
    */

   else if(jcb1.getSelectedItem()=="Max"){//设置最大需求源
       int p = 0;
       try{
           p =Integer.parseInt(jtf1.getText());
           if(p>4)
        {
           JOptionPane.showMessageDialog(this, "进程ID在0-4之间!");
           jtf1.setText("");
           return;
           }
           int Maxago[][]= new int[pno][sno];  //暂存最大需求
           Max[p][0]=Integer.parseInt(jtf2.getText());
           Max[p][1]=Integer.parseInt(jtf3.getText());
           Max[p][2]=Integer.parseInt(jtf4.getText());        

           for(int j=0;j<sno;j++){   //判断设置是否合理
                  int temp =Max[p][j]-Allocation[p][j];
                  if(temp>=0)
                  Need[p][j]=temp;
                  else
                  {
                     JOptionPane.showMessageDialog(this, "最大需求过小!请重新输入!");
                      Max=Maxago;
                      ShowData();
                      return;
                  }
              }
    }catch(Exception d)
    {
        JOptionPane.showMessageDialog(this, "输入有误!请重新输入!");
        ShowData();
        return;
    }
     ShowData();
     jta1.append("\n\n 最大需求设置成功!");
    }

   /**
    * 选择Allocation时!
    */

    else if(jcb1.getSelectedItem()=="Allocation"){//设置已分配资源
      int p = 0;
      try{
       p =Integer.parseInt(jtf1.getText());
         if(p>4)
         {
         JOptionPane.showMessageDialog(this, "进程ID在0-4之间!");
         jtf1.setText("");
         return;
         }
         Allocation[p][0]=Integer.parseInt(jtf2.getText());
         Allocation[p][1]=Integer.parseInt(jtf3.getText());
         Allocation[p][2]=Integer.parseInt(jtf4.getText());}
       catch(Exception d)
       {
           JOptionPane.showMessageDialog(this, "输入有误!请重新输入!");
           ShowData();
           return;
       }
       ShowData();
       jta1.append("\n\n 已分配资源设置成功!");
       }

}

截图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 使用java实现银行家算法

    银行家算法核心 先寻找满足系统当前剩余的资源量(avaliable )>=进程运行所需的资源数的进程(need),再假设这个进程安全校验是成功的,当这个进程运行完毕后,释放资源后,现在系统当前剩余的资源(avaliable)=avaliable+该线程之前已分配的资源(allocation) ,将该节点进程设为处理时忽略进程,再以上条件为前提进行安全校验. 安全校验:一个进程获得资源后,运行完毕,释放之前分配的资源,其他的线程可以继续运行,而不会造成死锁. 这样就会产生回溯. 满足条件:是否存在

  • java实现银行家算法

    本文实例为大家分享了java实现银行家算法的具体代码,供大家参考,具体内容如下 import java.util.Arrays; import javax.swing.JOptionPane; public class Banker_Dijkstra { static int available[]={3,3,2}; //可利用资源数 static int max[][]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};; //每线程最大需求 static i

  • java实现简单银行家算法

    本文实例为大家分享了java实现银行家算法的具体代码,供大家参考,具体内容如下 题目: 初始时,Allocate[i,j]=0,表示初始时没有进程得到任何资源.假定进程对资源的请求序 列为: Request(1)[M]=(1,0,0); Request(2)[M]=(2,1,0); Request(2)[M]=(2,0,1); Request(3)[M]=(2,1,1); Request(4)[M]=(0,0,2); Request(2)[M]=(1,0,1); Request(1)[M]=(1

  • java实现银行家算法(Swing界面)

    java代码实现了银行家算法,界面写的个人认为还是较为细致的,完整的实现了找安全序列等算法功能,可作为参考学习银行家算法. 直接上代码:①界面展示方法: public void ShowFrame() { this.setSize(500, 350); //大小 this.setAlwaysOnTop(true); this.setResizable(false);//不可拖动 this.setLayout(new BorderLayout()); this.setTitle("lly_bank

  • java实现简单QQ登录界面

    本文实例为大家分享了java实现简单QQ登录界面的具体代码,供大家参考,具体内容如下 java在图形界面,不是太强项,但不是不可以做,它的开源是very nice! 实现代码如下(想实现完美的界面,可能要更多coding的支持): package com.ts.x.swing; import java.awt.Color; import java.awt.Container; import java.awt.Cursor; import java.awt.Font; import java.aw

  • java模仿实现QQ登录界面

    本文实例为大家分享了java模仿实现qq登录界面的具体代码,供大家参考,具体内容如下 这是我模仿QQ2015版界面,实现的基本功能有登陆验证,重置等,当然直接复制代码运行是不一样的,还要注意自己插入自己的图片. 结果截图如下所示: 代码: import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.Image

  • java实现学生信息录入界面

    本文实例为大家分享了java实现学生信息录入界面的具体代码,供大家参考,具体内容如下 按如下要求完成编程: 1.创建一个学生信息录入界面,学生有学号.姓名.年龄.班级和成绩信息,界面中包含“确定”和“重置”按钮. 2.实现事件处理,单击“确定”按钮将学生信息封装到对象中,并通过输出对象将学生信息显示在终端控制台上:点击“重置”按钮情况界面中用户输入的信息. package work; import java.awt.Button; import java.awt.Frame; import ja

  • Java实现简单的日历界面

    本文实例为大家分享了Java实现简单日历界面的具体代码,供大家参考,具体内容如下 请使用JFrame.JPanel.JButton.JLabel和不同的布局管理器,实现如下日历视图. import java.awt.*; import javax.swing.*; public class Main {     public static void main(String[] args) {         JFrame frame = new JFrame("calendar");

  • Java有趣好玩的图形界面开发八个案例实现

    目录 1.复选框和单选框按钮组 2.文本编辑组件和滚动窗格 3.多个选项卡设置 4.在框架窗口中加入面板 5.在窗口中加入标签 6.框架中加入指定大小的标签 7.在框架窗口中加入按钮 8.框架窗口的创建 总结 虽然GUI技术没有很大的市场,甚至很多初学者放弃学习GUI,但是学习GUI编程的过程对于提高编程兴趣,深入理解Java编程有很大的作用.效果图如下,加油吧!! 1.复选框和单选框按钮组 —在框架窗口中加入复选框和单选框按钮组 import javax.swing.*; public cla

  • Java实现快速排序算法可视化的示例代码

    实现效果 示例代码 import java.awt.*; public class AlgoVisualizer { private static int DELAY = 100; private SelectionSortData data; private AlgoFrame frame; public AlgoVisualizer(int sceneWidth, int sceneHeight, int N){ data = new SelectionSortData(N, sceneHe

随机推荐