У меня есть служба ScheduledExecutorService, которой я передаю Runnable.Если объект Enemy, для которого предназначен поток, умирает, я заканчиваю поток с .shutDown()
, который работает просто отлично.Однако, если пользователь выходит из программы, поток все еще выполняется.Как я могу отключить его, когда это произойдет?
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(runnable, 2,2, TimeUnit.SECONDS);
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("SHOOT");
}
};
Прямо сейчас я переопределяю метод stop()
в моем главном из приложения.
@Override
public void stop() throws Exception {
Alert alert = new Alert(Alert.AlertType.CONFIRMATION, "Exit ?", ButtonType.YES, ButtonType.NO);
alert.show();
if (alert.getResult() == ButtonType.YES) {
//this works if put outside of alert
BlueSlime.scheduler.shutdown();
super.stop();
}
if(alert.getResult() == ButtonType.NO){
System.out.println("No");
}
Делая планировщик статическимЯ могу закрыть его, ссылаясь на BlueSLime из Main.Это отключит его, но есть ли лучший способ?Также Alert не работает, когда я закрываю программу, окно Alert показывается примерно полсекунды и исчезает, а потоки снова запускаются.