📄 desktop.java
字号:
hangUPToRun();
}
else if(e.getSource()==VHD_menu2)
{
//从虚拟硬盘中删除作业
deleteJobFromVHD();
}
else if(e.getSource()==VHD_menu11)
{
//从虚拟硬盘的列表中运行作业
runJobFromVHDTB();
}
else if(e.getSource()==VHD_menu22)
{
//从虚拟硬盘的列表中删除作业
deleteFromVHDTB();
}
else if(e.getSource()==PROC_menu3)
{
//结束进程
stopProcess();
}
else if(e.getSource()==PROC_menu4)
{
//设置光标跟随
if(CPUManager.follow)
{
setFollow(false);
PROC_menu1.setEnabled(true);
PROC_menu2.setEnabled(true);
PROC_menu3.setEnabled(true);
PROC_menu5.setEnabled(true);
PROC_menu4.setLabel("显示跟踪");
}
else
{
setFollow(true);
PROC_menu1.setEnabled(false);
PROC_menu2.setEnabled(false);
PROC_menu3.setEnabled(false);
PROC_menu4.setLabel("停止跟踪");
}
}
else if(e.getSource()==PROC_menu5_1)
{
this.setPriority(0);
}
else if(e.getSource()==PROC_menu5_2)
{
this.setPriority(1);
}
else if(e.getSource()==PROC_menu5_3)
{
this.setPriority(2);
}
else if(e.getSource()==PROC_menu5_4)
{
this.setPriority(3);
}
else if(e.getSource()==PROC_menu5_5)
{
this.setPriority(4);
}
else if(e.getSource()==Clear_Screen)
{
//清屏
SCR_Screen.setText("");
}
else if(e.getSource()==Clear_State)
{
//清屏
state_show.setText("");
}
}
public static void waitlistTimerRun()
{
if(Global.PCBWAITLIST.Size()>0)
{
int memspace=Global.MEMORY.count();
int id=Global.PCBWAITLIST.getLastID();
int HD_size=HDM.Size(HDM.GetIndex(id));
int jobpage=(int)HD_size/Global.PAGE_SIZE+1;
int minsize;
if(jobpage>Global.PAGES)
minsize=Global.PAGES;
else minsize=jobpage;
if(memspace>=minsize)
{
try
{
MM.newTable(id);
int pcb[] = new int[9];
pcb[0] = id;
pcb[1] = 0;
pcb[2] = 0;
pcb[3] = 0;
pcb[4] = 0;
pcb[5] = 0;
pcb[6] = 0;
pcb[7] = 0;
pcb[8] = 0;
Global.PCBLIST.addFirst(pcb);
setCellValueToProcessTable(id,"就绪");
Global.PCBWAITLIST.removeLast();
}
catch(myException e){addTextToStateTextField(""+e+"\n");}
}
else
{
Global.PCBWAITLIST.Change();
}
}
else
{
//等待队列中没有进程
}
}
public void HDAddJobToVHD()
{
DefaultTableModel model = (DefaultTableModel)detailTable.getModel();
int[] selectcount = detailTable.getSelectedRows();
if(selectcount.length!=0)
{
for(int i=0;i<selectcount.length;i++)
{
String path = model.getValueAt(selectcount[i],0).toString();
addTextToStateTextField("添加作业"+path+"\n");
addJobToVHD(path);
}
}
}
/*********************************************************
*功能描述: 添加一个作业到虚拟硬盘中去
*参数说明: path:作业路径
**********************************************************/
private void addJobToVHD(String path)
{
try
{
String ss[] = new String[4];
HDM.GetFile(path);
int index = HDM.getIndex();
int id = HDM.getID(index);
DefaultMutableTreeNode pnode = new DefaultMutableTreeNode(""+id);
VHD_treeModel.insertNodeInto(pnode, VHD_root, VHD_root.getChildCount());
for(int i=0;i<HDM.Size(0);i++)
{
DefaultMutableTreeNode leafnode = new DefaultMutableTreeNode(HDM.Get(0,i));
VHD_treeModel.insertNodeInto(leafnode, pnode, pnode.getChildCount());
}
VHD_table.RemoveAll();
for(int i=0;i<Global.HDTABLE.last();i++)
{
ss[0] = ""+HDM.getID(i);
ss[1] = HDM.getFileName(i);
ss[2] = ""+HDM.getIndex(i);
ss[3] = ""+HDM.Size(i);
VHD_table.addRow(ss);
}
}
catch(IOException e1){addTextToStateTextField(""+e1+"\n");}
catch(myException e1){addTextToStateTextField(""+e1+"\n");}
}
/***************************************************
*功能描述: 把作业从虚拟硬盘中删除
****************************************************/
public void deleteJobFromVHD()
{
TreePath treepath=VHD_tree.getSelectionPath();
if (treepath!=null)
{
//下面两行取得选取节点的父节点.
DefaultMutableTreeNode selectionNode=(DefaultMutableTreeNode)treepath.getLastPathComponent();
TreeNode parent=(TreeNode)selectionNode.getParent();
int id = 0;
try
{
id = Integer.parseInt(selectionNode.toString());
}
catch(NumberFormatException ex){}
int runOrNot = Global.PCBLIST.getIndex(id);
int runOrNot1 = Global.PCBINTERUPT.getIndex(id);
int runOrNot2 = Global.PCBWAITLIST.getIndex(id);
if(runOrNot1!=-1)
{
addTextToStateTextField("该作业挂起状态中...不可以删除\n");
}
if(runOrNot!=-1)
{
addTextToStateTextField("该作业正在运行中...不可以删除\n");
}
if(runOrNot2!=-1)
{
addTextToStateTextField("该作业正在等待队列中...不可以删除\n");
}
if(selectionNode.isLeaf())
{
addTextToStateTextField("这是指令...不可以删除\n");
}
if (parent!=null&&(!selectionNode.isLeaf())&&runOrNot==-1&&runOrNot1==-1&&runOrNot2==-1)
{
//由DefaultTreeModel的removeNodeFromParent()方法删除节点,包含它的子节点。
VHD_treeModel.removeNodeFromParent(selectionNode);
try
{
HDM.RemoveFile(id);
}
catch(myException e1){System.out.println(e1);}
System.out.println(selectionNode.toString());
VHD_table.RemoveAll();
String ss[] = new String[4];
for(int i=0;i<Global.HDTABLE.last();i++)
{
ss[0] = ""+HDM.getID(i);
ss[1] = HDM.getFileName(i);
ss[2] = ""+HDM.getIndex(i);
ss[3] = ""+HDM.Size(i);
VHD_table.addRow(ss);
}//end for
}//end if
}//end if
}
/****************************************************
*功能描述: 遍历虚拟硬盘树形目录反回所要求的结点
*****************************************************/
public DefaultMutableTreeNode findUserObject(Object obj)
{
//depthFirstEnumeration()或depthFirstEnumeration()方法返回枚举对象。
//这两个方式分别代表了不同的遍历策略(宽度遍历和深度遍历)。
Enumeration e = VHD_root.depthFirstEnumeration();
while (e.hasMoreElements())
{
DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.nextElement();
if (node.getUserObject().equals(obj))
{
return node;
}
}
return null;
}
/*******************************************************
*功能描述: 把一个作业从虚拟硬盘中添加到虚拟内存中
********************************************************/
private void addJobToMEM()
{
TreePath treepath=VHD_tree.getSelectionPath();
if (treepath!=null)
{
//下面两行取得选取节点的父节点.
DefaultMutableTreeNode selectionNode=(DefaultMutableTreeNode)treepath.getLastPathComponent();
TreeNode parent=(TreeNode)selectionNode.getParent();
if (parent!=null&&(!selectionNode.isLeaf()))
{
int id = Integer.parseInt(selectionNode.toString());
try
{
MM.newTable(id);
int pcb[] = new int[9];
pcb[0] = id;
pcb[1] = 0;
pcb[2] = 0;
pcb[3] = 0;
pcb[4] = 0;
pcb[5] = 0;
pcb[6] = 0;
pcb[7] = 0;
pcb[8] = 0;
Global.PCBLIST.addFirst(pcb);
String[] ssss = new String[4];
ssss[0] = ""+id;
ssss[1] = "就绪";
ssss[2] = "0";
ssss[3] = "0";
addRowToProcessTable(ssss);
}
catch(myException e1)
{
StringTokenizer ss = new StringTokenizer(""+e1," ");
String buff = new String();
while(ss.hasMoreTokens())
{
buff=ss.nextToken();
}
if(buff.equals("没有足够内存创建作业页表!"))
{
if(Global.PCBWAITLIST.getIndex(id)==-1)
{
int pcb[] = new int[9];
pcb[0] = id;
pcb[1] = 0;
pcb[2] = 0;
pcb[3] = 0;
pcb[4] = 0;
pcb[5] = 0;
pcb[6] = 0;
pcb[7] = 0;
pcb[8] = 0;
Global.PCBWAITLIST.addFirst(pcb);
String[] ssss = new String[4];
ssss[0] = ""+id;
ssss[1] = "等待";
ssss[2] = "0";
ssss[3] = "0";
desktop.Desktop.addRowToProcessTable(ssss);
}
else addTextToStateTextField("等待队列中已经存在该作业了\n");
}
else
{
addTextToStateTextField(""+e1+"\n");
}
}
}//end if
}//end if
ReFlashTable();
}
/*************************************************
*功能描述: 从虚拟硬盘列表中运行一个作业
**************************************************/
public void runJobFromVHDTB()
{
DetailTableModel model = (DetailTableModel)VHD_table.getModel();
int[] selectcount = VHD_table.getSelectedRows();
if(selectcount.length!=0)
{
for(int i=0;i<selectcount.length;i++)
{
String Sid = model.getValueAt(selectcount[i],0).toString();
int id = Integer.parseInt(Sid);
try
{
if(Global.PCBWAITLIST.getIndex(id)==-1)
{
MM.newTable(id);
int pcb[] = new int[9];
pcb[0] = id;
pcb[1] = 0;
pcb[2] = 0;
pcb[3] = 0;
pcb[4] = 0;
pcb[5] = 0;
pcb[6] = 0;
pcb[7] = 0;
pcb[8] = 0;
Global.PCBLIST.addFirst(pcb);
String[] ssss = new String[4];
ssss[0] = ""+id;
ssss[1] = "就绪";
ssss[2] = "0";
ssss[3] = "0";
addRowToProcessTable(ssss);
}
else addTextToStateTextField("等待队列中已经存在该作业了\n");
}
catch(myException e1)
{
StringTokenizer ss = new StringTokenizer(""+e1," ");
String buff = new String();
while(ss.hasMoreTokens())
{
buff=ss.nextToken();
}
if(buff.equals("没有足够内存创建作业页表!"))
{
int pcb[] = new int[9];
pcb[0] = id;
pcb[1] = 0;
pcb[2] = 0;
pcb[3] = 0;
pcb[4] = 0;
pcb[5] = 0;
pcb[6] = 0;
pcb[7] = 0;
pcb[8] = 0;
Global.PCBWAITLIST.addFirst(pcb);
String[] ssss = new String[4];
ssss[0] = ""+id;
ssss[1] = "等待";
ssss[2] = "0";
ssss[3] = "0";
desktop.Desktop.addRowToProcessTable(ssss);
}
else
{
addTextToStateTextField(""+e1+"\n");
}
//addTextToStateTextField(""+e1+"\n");
}
ReFlashTable();
}//end for
}//end if
else
{
//在列表中没有选中某一项
}//end else
}
/***************************************************
*功能描述: 删除虚拟硬盘中的作业
***************************************************/
public void deleteFromVHDTB()
{
DetailTableModel model = (DetailTableModel)VHD_table.getModel();
int[] selectcount = VHD_table.getSelectedRows();
int buf;
if(selectcount.length!=0)
{
for(int i=0;i<selectcount.length;i++)
{
for(int j=i+1;j<selectcount.length;j++)
{
if(selectcount[i]>selectcount[j])
{
buf=selectcount[i];
selectcount[i]=selectcount[j];
selectcount[j]=buf;
}
}
}
for(int i=0;i<selectcount.length;i++)
{
try
{
String Sid = model.getValueAt(selectcount[i]-i,0).toString();
int id = Integer.parseInt(Sid);
int runOrNot = Global.PCBLIST.getIndex(id);
int runOrNot1 = Global.PCBINTERUPT.getIndex(id);
int runOrNot2 = Global.PCBWAITLIST.getIndex(id);
if(runOrNot1!=-1)
{
addTextToStateTextField("该作业挂起状态中...不可以删除\n");
}
if(runOrNot!=-1)
{
addTextToStateTextField("该作业正在运行中...不可以删除\n");
}
if(runOrNot2!=-1)
{
addTextToStateTextField("该作业正在等待队列中...不可以删除\n");
}
if(runOrNot1==-1&&runOrNot==-1&&runOrNot2==-1)
{
DefaultMutableTreeNode deleteNode = this.findUserObject(Sid);
VHD_table.removeRow(selectcount[i]-i);
VHD_treeModel.removeNodeFromParent(deleteNode);
HDM.RemoveFile(id);
}
}
catch(myException e1){addTextToStateTextField(""+e1);}
}//end for
}//end if
else
{
//在列表中没有选中某一项
}//end else
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -