我在停止中間線程時遇到問題。這是我的代碼的一部分,在StoplightThread
類中,我對第一個if語句有問題。它應該做的是等待至少10秒,然後允許用戶按下按鈕,以便他們可以改變光線,如果按下按鈕,則應當停止正在運行的線程,在這種情況下,Thread.sleep(40000)
。發生什麼事是當我按下按鈕時它改變光線但不停止線程。如果我在按住按鈕的同時仍有20秒左右的時間,它會在10秒內爲黃燈增加20秒,使它變黃30秒。多線程處理和中途停止
編輯:如果您想知道,stoplightCanvas.x == 3
是綠色,stoplightCanvas.x == 2
是黃色,stoplightCanvas.x == 1
是紅色。
class StoplightCanvas extends Canvas implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == cross) {
isPressed = true;
if (x == 3 && canCross)
x = 2;
}
repaint();
}
}
class StoplightThread extends Thread
{
StoplightCanvas stoplightCanvas;
StoplightThread(StoplightCanvas stoplightCanvas) {
this.stoplightCanvas = stoplightCanvas;
}
public void run()
{
if (stoplightCanvas.x == 3){
Thread.sleep(10000);
stoplightCanvas.canCross = true;
Thread.sleep(40000);
if(stoplightCanvas.isPressed)
StoplightThread.interrupt();
} else if (stoplightCanvas.x == 2) {
Thread.sleep(10000);
} else if (stoplightCanvas.x == 1) {
Thread.sleep(60000);
}
} catch (InterruptedException e){}
stoplightCanvas.toggleColor();
stoplightCanvas.repaint();
}
}
}
我先看看,如果按下按鈕,然後嘗試做'StoplightThread.interrupt();' – FJam 2013-05-13 20:40:51
當我嘗試執行'StoplightThread.interrupt();'我得到這個錯誤:'非靜態方法中斷()不能從靜態上下文中引用' – FJam 2013-05-13 20:42:11
您正在從線程班是的?你讀過關於「這個」和「超級」的關鍵詞嗎? – ObedMarsh 2013-05-13 20:45:14