Я видел несколько сообщений об этом, в которых ответы помечены как правильные, хотя они, похоже, не работают, что может быть по ряду причин.
Я хотел бы обработать событие, при котором пользователь закрывает приложение на панели задач, щелкнув приложение правой кнопкой мыши. Я хотел бы обработать это, чтобы обеспечить чистое завершение работы и убедиться, что все пользовательские данные сохранены.
Я попытался добавить перехватчик выключения (пример ниже), но он не срабатывал при закрытии приложения с панели задач.
Runtime.getRuntime().addShutdownHook(new Thread(()->{
System.out.println("closing . . .");
}));
Другой метод, который я пробовал, заключался в добавлении прослушивателя setOnCloseRequest для моей сцены, как показано ниже, но событие WINDOW_CLOSE_REQUEST также не запускалось при закрытии приложения из панели задач.
stage.setOnCloseRequest(event2 -> {
System.out.println("closing . . .");
Platform.exit();
System.exit(0);
});
Application.stop()
, так и перехватчик выключения. Однако, если я повешу программу и принудительно закрою ее с панели задач, ни один из них не будет вызван. (Поведение из диспетчера задач одинаково в обоих случаях.) Поскольку вы, вероятно, все равно ничего не сможете сделать, если разрешите зависанию приложения, это, кажется, лучшее, на что вы могли надеяться. Если у вас это работает по-другому, опубликуйте воспроизводимый пример в своем вопросе. - person James_D   schedule 02.05.2020