Как именно мне вызвать метод .interrupt()
? Когда у меня есть Thread.sleep(1000)
, когда и где мне вызывать метод .interrupt()
? это после? Что я хочу сделать, так это остановиться Thread.sleep(1000)
на полпути.
РЕДАКТИРОВАТЬ::
у меня проблемы с остановкой потока в середине. Это часть моего кода, в классе StoplightThread
у меня проблемы с первым оператором if. Предполагается, что он должен подождать не менее 10 секунд, а затем позволить пользователю нажать кнопку, чтобы он мог изменить свет, если кнопка нажата, она должна остановить текущий поток в этом случае Thread.sleep(40000)
. Что происходит, когда я нажимаю кнопку, она меняет свет, но не останавливает нить. Если я нажму кнопку, пока осталось 20 секунд, это добавит 20 секунд к 10 секундам для желтого света, сделав его желтым на 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();
}
}
}