какое событие запускается, когда вы закрываете приложение javafx на панели задач и как вы с ним справляетесь?

Я видел несколько сообщений об этом, в которых ответы помечены как правильные, хотя они, похоже, не работают, что может быть по ряду причин.

Пример

Я хотел бы обработать событие, при котором пользователь закрывает приложение на панели задач, щелкнув приложение правой кнопкой мыши. Я хотел бы обработать это, чтобы обеспечить чистое завершение работы и убедиться, что все пользовательские данные сохранены.

Я попытался добавить перехватчик выключения (пример ниже), но он не срабатывал при закрытии приложения с панели задач.

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);
});

person Community    schedule 02.05.2020    source источник
comment
Вы пробовали onClick   -  person David Enoma    schedule 02.05.2020
comment
@DavidEnoma, не могли бы вы привести пример того, как я могу добавить прослушиватель onClick к опции панели задач, пожалуйста   -  person    schedule 02.05.2020
comment
Я загрузил виртуальную машину Windows 10 в Virtual Box и запустил этот пример. Выбор «Закрыть окно» на панели задач вызывал как метод Application.stop(), так и перехватчик выключения. Однако, если я повешу программу и принудительно закрою ее с панели задач, ни один из них не будет вызван. (Поведение из диспетчера задач одинаково в обоих случаях.) Поскольку вы, вероятно, все равно ничего не сможете сделать, если разрешите зависанию приложения, это, кажется, лучшее, на что вы могли надеяться. Если у вас это работает по-другому, опубликуйте воспроизводимый пример в своем вопросе.   -  person James_D    schedule 02.05.2020


Ответы (1)


Основываясь на ответе @James_D, я понял, что добавляю хук выключения в неправильном месте, чтобы помочь любому, кто относительно плохо знаком с java и JavaFX, при добавлении хука выключения вы должны сделать это перед вызовом запуска (args) в основной метод.

person Community    schedule 02.05.2020
comment
Ага, что-то такое припоминаю. Я обновлю ответ на другой вопрос, а затем отмечу его как дубликат: это, вероятно, наиболее полезно для других пользователей. - person James_D; 02.05.2020