package com.yason.bankalgorithm;
import com.yason.bankalgorithm.base.BaseWindow;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class HomeWindow extends BaseWindow {
private JPanel jp1;
private JComboBox jcb1;//选择框
private JTextField jtf1;//输入框
private JTextField jtf2;
private JTextField jtf3;
private JTextField jtf4;
private JButton jb1;
private JTextArea jta1;
private String pname[];//进程数量
private int Source[];//系统各种资源的总量
private int Max[][]; // 最大需求矩阵
private int Allocation[][];// 每个进程现在所分配的各种资源类型的实例数量
private int Available[]; // 可利用资源向量,即每种资源的现有实例数
private int Need[][]; // 每个进程还需要的剩余资源
// private int Work[]; // 系统可供给进程的各类资源数量
// private boolean Finish[]; // 标志一个进程是否可以得到其所需要的资源
// private int Request[]; // 进程对每个资源的实例数的请求数量
private int rowCount;//矩阵行数
private int columnCount;//矩阵列数
@Override
protected JFrame setRootView() {
JFrame jf = new JFrame();
jf.setSize(500, 350);//大小
jf.setResizable(false);//不可拖动
jf.setLayout(new BorderLayout());
jf.setTitle("银行家算法");
return jf;
}
@Override
protected void initView(JFrame root) {
String s[] = {"Allocation", "Max", "Available", "Request"};
jcb1 = new JComboBox(s);
jp1 = new JPanel();
jp1.setBackground(new java.awt.Color(128, 255, 128));
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("确定");
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
performClick();
}
});
jp1.add(jb1);
root.add(jp1, "South");
jta1 = new JTextArea();
jta1.setLineWrap(true);
jta1.setBackground(Color.white);
jta1.setEditable(false);
root.add(jta1, "Center");
}
@Override
protected void loadData() {
Source = TestData.Source;
Max = TestData.Max;
Allocation = TestData.Allocation;
pname = TestData.pname;
rowCount = Max.length;
columnCount = Source.length;
Available = new int[columnCount];
Need = new int[rowCount][columnCount];
//计算Available
for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) {
Available[columnIndex] = Source[columnIndex]
- Allocation[0][columnIndex]
- Allocation[1][columnIndex]
- Allocation[2][columnIndex]
- Allocation[3][columnIndex]
- Allocation[4][columnIndex];
}
//计算Need
for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {
for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) {
Need[rowIndex][columnIndex] = Max[rowIndex][columnIndex] - Allocation[rowIndex][columnIndex];
}
}
// Work = new int[columnCount];
// Request = new int[columnCount];
showData();
}
private void performClick() {
if (jcb1.getSelectedItem() == "Request") {
onRequestClick();
} else if (jcb1.getSelectedItem() == "Available") {
onAvailableClick();
} else if (jcb1.getSelectedItem() == "Max") {
onMaxClick();
} else if (jcb1.getSelectedItem() == "Allocation") {
onAllocationClick();
}
}
private void onAvailableClick() {
try {
int i2 = Integer.parseInt(jtf2.getText());
int i3 = Integer.parseInt(jtf3.getText());
int i4 = Integer.parseInt(jtf4.getText());
Available[0] = i2;
Available[1] = i3;
Available[2] = i4;
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null,
"您输入有误!请重新输入!", "提示", JOptionPane.ERROR_MESSAGE);
return;
}
showData();
JOptionPane.showMessageDialog(null,
"可用资源设置成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
}
private void onRequestClick() {
int pid;
int[] Request = new int[columnCount];
try {
pid = 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(null,
"您输入有误!请重新输入!", "提示", JOptionPane.ERROR_MESSAGE);
return;
}
if (!checkPid(pid)) {
return;
}
if (!judgeEnough(pid, Request)) {//初步分配检查
return;
}
int[] safe = saftyCheck(pid, Request);
if (safe != null) {//安全性检查
allocate(pid, Request);//检查到安全序列才分配
showData();
StringBuilder sb = new StringBuilder("");
for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {//打印安全序列
sb.append("P" + String.valueOf(safe[rowIndex]) + " ");
}
JOptionPane.showMessageDialog(null,
"找到了安全序列:" + sb.toString() + ",请求成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
} else { //不安全
JOptionPane.showMessageDialog(null,
"找不到安全序列!请求失败!", "提示", JOptionPane.ERROR_MESSAGE);
}
}
private void onMaxClick() {
int pid = Integer.parseInt(jtf1.getText());
if (!checkPid(pid)) {
return;
}
int[] Maxago = new int[columnCount]; //暂存最大需求
int[] Needago = new int[columnCount]; //暂存最大需求
try {
Maxago[0] = Integer.parseInt(jtf2.getText());
Maxago[1] = Integer.parseInt(jtf3.getText());
Maxago[2] = Integer.parseInt(jtf4.getText());
} catch (NumberFormatException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null,
"输入有误!请重新输入", "提示", JOptionPane.ERROR_MESSAGE);
return;
}
for (int coloumIndex = 0; coloumIndex < columnCount; coloumIndex++) { //判断设置是否合理
int temp = Maxago[coloumIndex] - Allocation[pid][coloumIndex];
if (temp >= 0)
Needago[coloumIndex] = temp;
else {
JOptionPane.showMessageDialog(null,
"最大需求过小!请重新输入", "提示", JOptionPane.ERROR_MESSAGE);
return;
}
}
for (int coloumIndex = 0; coloumIndex < columnCount; coloumIndex++) {
Max[pid][coloumIndex] = Maxago[coloumIndex];
Need[pid][coloumIndex] = Needago[coloumIndex]
没有合适的资源?快使用搜索试试~ 我知道了~
OS实验+银行家算法(报告+实验完整版)
共15个文件
class:5个
java:4个
xml:4个
需积分: 13 9 下载量 171 浏览量
2018-01-17
23:22:39
上传
评论
收藏 75KB RAR 举报
温馨提示
高质量操作系统实验——银行家算法,内涵报告+实验,采用 Java+Intel IDEA 进行开发!!!
资源推荐
资源详情
资源评论
收起资源包目录
OS实验+银行家算法(报告+实验完整版).rar (15个子文件)
操作系统实验
BankAlgorithm
src
com
yason
bankalgorithm
TestData.java 488B
HomeWindow.java 15KB
Main.java 148B
base
BaseWindow.java 402B
out
production
BankAlgorithm
com
yason
bankalgorithm
HomeWindow$1.class 796B
Main.class 480B
TestData.class 668B
base
BaseWindow.class 648B
HomeWindow.class 9KB
.idea
misc.xml 273B
workspace.xml 32KB
uiDesigner.xml 9KB
inspectionProfiles
modules.xml 266B
BankAlgorithm.iml 423B
操作系统实验.docx 61KB
共 15 条
- 1
资源评论
yason_mz
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功