-2
我試圖運行具有優先級隊列系統的調度程序的示例。它的工作方式如下:具有優先隊列拋出異常的調度程序
使用包含優先級的GUI輸入新進程。進程也通過GUI命令終止。上下文切換是通過命令來實現的,切換的原因並不重要。代碼中使用了三個組件,其中包括:基於優先級的就緒隊列,阻止列表和完成系統狀態的輸出,每個上下文切換顯示就緒,已阻止和正在運行的進程。
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.PriorityQueue;
import java.util.Queue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
class dispatcher extends JFrame implements ActionListener {
static int processNo = 0;
static Process currentlyRunning;
static Queue<Process> readyQueue;
static Queue<Process> blockedQueue;
static JButton newProcess;
static JButton contextSwitch;
static JTextField priority;
static JTextArea Queues;
private static Process newProcess(int i, int i0, String running) {
throw new UnsupportedOperationException("Not supported yet.");
}
dispatcher() {
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
Queues = new JTextArea(5, 15);
Queues.setPreferredSize(new Dimension(500, 400));
cp.add(Queues);
cp.add(new JLabel("Priority"));
priority = new JTextField(6);
newProcess = new JButton("Create Process");
newProcess.addActionListener(this);
cp.add(priority);
cp.add(newProcess);
contextSwitch = new JButton("Context Switch");
contextSwitch.addActionListener(this);
cp.add(contextSwitch);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Dispatcher");
setSize(600, 500);
setVisible(true);
}
public static void main(String args[]) {
dispatcher d = new dispatcher();
readyQueue = new PriorityQueue<>();
blockedQueue = new PriorityQueue<>();
Process p1 = newProcess(processNo++, 2, "Running");
Process p2 = newProcess(processNo++, 1, "Blocked");
Process p3 = newProcess(processNo++, 4, "Ready");
Process p4 = newProcess(processNo++, 3, "Ready");
Process p5 = newProcess(processNo++, 5, "Ready");
Process p6 = newProcess(processNo++, 8, "Blocked");
readyQueue.add(p3);
readyQueue.add(p4);
readyQueue.add(p5);
blockedQueue.add(p6);
blockedQueue.add(p2);
currentlyRunning = p1;
contextSwitch();
}
static void createProcess(int priority) {
readyQueue.add(newProcess(processNo++, priority, "ready"));
}
static void contextSwitch() {
String sb;
String currentState = null;
sb = " " + currentlyRunning
+ "Currently Running Process"+"\n"
+ "Process No Priority Current State\n"
+ currentlyRunning+processNo
+ " "+currentlyRunning+priority+currentState + "\n\n";
currentState = "Blocked";
blockedQueue.add(currentlyRunning);
currentlyRunning = readyQueue.poll();
currentState = "Running";
sb = sb + "Ready Queue\n" + "Process No Priority Current State\n";
for (Process p : readyQueue) {
sb = sb + p+processNo + " " + p+priority + " " + p+currentState
+ "\n\n";
}
sb = sb + "\nBlocked Queue\n" + "Process No Priority Current State\n";
for (Process p : blockedQueue) {
sb = "\n"
+ sb + p+processNo + " " + p+priority + " " + p+currentState;
Queues.setText(sb);
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == newProcess) {
System.out.print("process");
int p = Integer.parseInt(priority.getText());
p = (p < 0) ? 2 : p;
createProcess(p);
} else{
System.out.print("context");
contextSwitch();
}
}
}
輸出應該是這樣的:click here 但我發現了一個空白的圖形用戶界面是這樣的:click here 當我編譯的代碼,我得到了很多的例外。如果我輸入一個數字並點擊任何按鈕,我就會收到未知來源。但是,如果沒有在GUI中做任何事情,這是堆棧跟蹤:
Exception in thread "main" java.lang.UnsupportedOperationException: Not supported yet.
at dispatcher.newProcess(dispatcher.java:24)
at dispatcher.main(dispatcher.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
_「當我編譯代碼時,出現了很多異常」_ - 編譯代碼時沒有出現異常,您收到編譯器錯誤消息。顯示這些消息。 –
我添加了堆棧跟蹤編譯錯誤,謝謝 – codingenthusiast
@JimGarrison我發佈了錯誤,如果任何人都可以看一看,不勝感激 – codingenthusiast