⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 desktop.java

📁 这是一份标准的课程设计文档
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
			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 + -