📄 opration.java
字号:
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 + -