メソッドを正確に呼び出す.interrupt()
方法を教えてください。があるとき、いつ、どこでメソッドThread.sleep(1000)
を呼び出すのですか? .interrupt()
後ですか?やりたいことはThread.sleep(1000)
途中でやめることです。
編集::
スレッドを途中で止めるのに苦労しています。これは私のコードの一部です。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();
}
}
}