Пожалуйста, помогите мне с моей проблемой. У меня есть 2 JMenuItems, если я нажму на Start, он начнется и начнет работать. Если я нажму «Стоп», он остановится :) После того, как я нажал кнопку «Старт», я нажимаю «Остановить», а иногда останавливается, а иногда нет. Но я хочу, чтобы он всегда останавливался.Тема Прерывание иногда работает, а иногда нет
Что я сделал не так? :/
class DiashowListener implements ActionListener {
Thread td;
boolean ok = false;
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Start")) {
td = new Thread(new Runnable() {
public void run() {
if (bimg != null) {
while (!ok) {
try {
...
} catch (Exception e2) {
}
frame.repaint();
}
}
}
});
td.start();
} else if (e.getActionCommand().equals("Stop")) {
if (td != null){
ok = true;
}
}
}
}
EDIT: хорошо я что-то изменилось, его работы сейчас, но: Если я нажимаю на Stop он должен немедленно прекратить.
Просто догадайтесь: попробуйте создать экземпляр td где-то вне actionPerformed. Как сейчас, существует риск (возможно), что td ссылается на совершенно новый поток. Изменить: также в «Стоп»: td.interrupt(); и, более того, см. ответ Димы .... –