#java #multithreading
#java #многопоточность
Вопрос:
Привет всем!
У меня есть поток, который обновляет представление по шаблону Observer. Обновление работает хорошо, но проблема в том, что прерывание не работает. Пожалуйста, помогите.
Главная:
public class Main {
public static Sensor s;
public static Thread t;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
s = new Sensor (1);
t = new Thread(){
@Override
public void run() {
Random r = new Random ();
while (!isInterrupted())
{
try {
s.setTemp(r.nextInt(40));
s.notifyObservers(s.getTemp());
sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
};
JFrame jf = new JFrame();
jf.setVisible(true);
s.addObserver(jf);
t.start();
}
}
Просмотр (кнопка прерывания):
private void bt_stopActionPerformed(java.awt.event.ActionEvent evt) {
Main.t.interrupt();
}
Ответ №1:
Когда Thread.sleep()
генерируется InterruptedException
, ваш interrupted
флаг потока устанавливается на false
(для Thread.sleep()
этого обратитесь к JavaDoc), поэтому вам нужно добавить interrupt()
or break
в ваше catch
предложение.