📄 experiment3.java
字号:
import java.awt.*;
import java.awt.event.*;
class SDialog extends Dialog implements ActionListener
{
int sourcekind1;
Label[] label;
TextField[] text;
int[] kinds;
String[] skinds;
Button button;
char nem;
GridBagLayout grid;
GridBagConstraints c;
SDialog(Frame f,String s,boolean b,int sourcekind1)
{
super(f,s,b);
grid=new GridBagLayout();
c=new GridBagConstraints();
setLayout(grid);
setBounds(100,100,200,50+30*sourcekind1);
nem='A';
label=new Label[sourcekind1];
text=new TextField[sourcekind1];
kinds=new int[sourcekind1];
skinds=new String[sourcekind1];
button=new Button("确定");
this.sourcekind1=sourcekind1;
for(int i=0;i<sourcekind1;i++)
{
label[i]=new Label(nem+"类资源量为");
text[i]=new TextField(3);
addComponent(label[i],i,0,2,1);
addComponent(text[i],i,2,1,1);
nem++;
}
addComponent(button,0,3,1,1);
button.addActionListener(this);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
setVisible(false);
}
});
}
public void actionPerformed(ActionEvent e)
{
for(int i=0;i<sourcekind1;i++)
{
skinds[i]=text[i].getText();
kinds[i]=Integer.parseInt(skinds[i]);
}
setVisible(false);
}
private void addComponent(Component component,int row,int column,int width,int hight)
{
c.gridx=column;
c.gridy=row;
c.gridwidth=width;
c.gridheight=hight;
grid.setConstraints(component,c);
add(component);
}
}
class PDialog extends Dialog implements ActionListener
{
int sourcekind1;
int processnum1;
char nem;
Label labelM,labelA,label1;
Label[] label,labelkinds1,labelkinds2;
TextField[][] textMax,textAllo;
int[][] textMaxCon,textAlloCon;
Button button;
GridBagLayout grid;
GridBagConstraints c;
PDialog(Frame f,String s,boolean b,int sourcekind1,int processnum)
{
super(f,s,b);
grid=new GridBagLayout();
c=new GridBagConstraints();
setLayout(grid);
processnum1=processnum;
this.sourcekind1=sourcekind1;
setBounds(100,100,300+50*sourcekind1,100+30*processnum);
nem='A';
button=new Button("确定");
labelM=new Label("Max(资源)");
label1=new Label("请输入各进程的详细信息:");
labelA=new Label("Allocation(资源)");
labelkinds1=new Label[sourcekind1];
labelkinds2=new Label[sourcekind1];
label=new Label[processnum];
textMax=new TextField[sourcekind1][processnum];
textAllo=new TextField[sourcekind1][processnum];
textMaxCon=new int[sourcekind1][processnum];
textAlloCon=new int[sourcekind1][processnum];
addComponent(label1,0,0,5,1);
addComponent(labelM,1,2,sourcekind1,1);
addComponent(labelA,1,2+sourcekind1,sourcekind1,1);
for(int i=0;i<sourcekind1;i++)
{
labelkinds1[i]=new Label(nem+" ");
labelkinds2[i]=new Label(nem+" ");
addComponent(labelkinds1[i],2,2+i,1,1);
addComponent(labelkinds2[i],2,2+i+sourcekind1,1,1);
nem++;
}
for(int i=0;i<processnum;i++)
{
label[i]=new Label("P"+(i+1)+"号进程:");
for(int j=0;j<sourcekind1;j++)
{
textMax[j][i]=new TextField(3);
textAllo[j][i]=new TextField(3);
addComponent(textMax[j][i],i+3,2+j,1,1);
addComponent(textAllo[j][i],i+3,2+j+sourcekind1,1,1);
}
addComponent(label[i],i+3,0,2,1);
}
addComponent(button,0,2+2*sourcekind1,1,1);
button.addActionListener(this);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
setVisible(false);
}
});
}
private void addComponent(Component component,int row,int column,int width,int hight)
{
c.gridx=column;
c.gridy=row;
c.gridwidth=width;
c.gridheight=hight;
grid.setConstraints(component,c);
add(component);
}
public void actionPerformed(ActionEvent e)
{
for(int i=0;i<processnum1;i++)
{
for(int j=0;j<sourcekind1;j++)
{
String s1=textMax[j][i].getText();
String s2=textAllo[j][i].getText();
textMaxCon[j][i]=Integer.parseInt(s1);
textAlloCon[j][i]=Integer.parseInt(s2);
}
}
setVisible(false);
}
}
class DFrame extends Frame implements ActionListener
{
TextField text1,text2;
TextArea textoutput;
Label label1,label2;
Button button1,button2,button3;
SDialog sDialog;
PDialog pDialog;
int sourceskinds,processnum;
GridBagLayout grid;
GridBagConstraints c;
DFrame(String s)
{
super(s);
grid=new GridBagLayout();
c=new GridBagConstraints();
setLayout(grid);
label1=new Label("请输入资源类型数");
label2=new Label("请输入进程数");
text1=new TextField(3);
text2=new TextField(3);
textoutput=new TextArea(5,30);
button1=new Button("确定");
button2=new Button("确定");
button3=new Button("运行并察看结果");
addComponent(label1,0,0,3,1);
addComponent(label2,1,0,3,1);
addComponent(text1,0,3,1,1);
addComponent(text2,1,3,1,1);
addComponent(button1,0,4,1,1);
addComponent(button2,1,4,1,1);
addComponent(button3,2,0,5,1);
addComponent(textoutput,3,0,5,3);
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
setBounds(400,400,400,300);
text2.setEditable(false);
textoutput.setEditable(false);
setVisible(true);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
private void addComponent(Component component,int row,int column,int width,int hight)
{
c.gridx=column;
c.gridy=row;
c.gridwidth=width;
c.gridheight=hight;
grid.setConstraints(component,c);
add(component);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button1)
{
String s=text1.getText();
sourceskinds=Integer.parseInt(s);
sDialog=new SDialog(this,"各类资源量",true,sourceskinds);
sDialog.setVisible(true);
text2.setEditable(true);
}
else if(e.getSource()==button2)
{
String s=text2.getText();
processnum=Integer.parseInt(s);
pDialog=new PDialog(this,"各进程参数",true,sourceskinds,processnum);
pDialog.setVisible(true);
}
else if(e.getSource()==button3)
{
int boo1=0;
int num=0;
int[] processalive=new int[processnum];
int[] sourceremain=new int[sourceskinds];
int[][] processneed=new int[sourceskinds][processnum];
for(int i=0;i<processnum;i++)
{
processalive[i]=0;
}
for(int i=0;i<sourceskinds;i++)
{
sourceremain[i]=sDialog.kinds[i];
for(int j=0;j<processnum;j++)
{
sourceremain[i]=sourceremain[i]-pDialog.textAlloCon[i][j];
processneed[i][j]=pDialog.textMaxCon[i][j]-pDialog.textAlloCon[i][j];
}
}
while(num<=processnum)
{
int num2=0;
for(int j=0;j<processnum;j++)
{
boo1=0;
if(processalive[j]==0)
{
for(int i=0;i<sourceskinds;i++)
{
if(processneed[i][j]>sourceremain[i])
{
boo1=1;
break;
}
}
if(boo1==1)
{
num2++;
}
if(boo1==0)
{
processalive[j]=1;
if(j<(processnum-1))
{
textoutput.append("P"+(j+1)+" --> ");
}
else
textoutput.append("P"+(j+1));
for(int i=0;i<sourceskinds;i++)
{
sourceremain[i]=sourceremain[i]+pDialog.textAlloCon[i][j];
}
num++;
break;
}
}
}
if(num==processnum)
{
textoutput.append("\n");
break;
}
if(num2==processnum)
{
textoutput.append("it's Unsafe\n");
break;
}
}
}
}
}
public class Experiment3
{
public static void main(String args[])
{
new DFrame("银行家算法系统");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -