Запретить / отменить закрытие основного этапа в JavaFX 2.2
Как видно из заголовка, мой вопрос: как я могу предотвратить / отменить закрытие начальной стадии в JavaFX 2.2? Я провел некоторое исследование в Google, и следующие две ссылки, казалось, решили проблему:
Запрет или отмена выхода из JavaFX 2Тема: JavaFX 2.0 Stage onClose событиеЯ попробовал методы, описанные в этих двух ссылках, но, к сожалению для меня, ни одна из них не работает. Итак, без дальнейших церемоний, вот что я сделал.
Во-первых, я пытался прикрепитьOnCloseRequest
кprimaryStage
следующее.
primaryStage.setOnCloseRequest(new EventHandler() {
@Override
public void handle(WindowEvent event) {
if (!canExit()) {
event.consume();
primaryStage.show(); // I tried without this line also.
}
}
});
когдаcanExit()
возвращаетсяfalse
Я попытался предотвратить дальнейшее распространение события и вызвать выход из приложения, вызвавevent.consume()
, Но сцена закрывается / скрывается, и я получаю следующие сообщения об ошибках в окне вывода Netbeans. Он продолжает поступать несколько раз, пока я не закрою приложение из Netbeans.
(java:6731): Gtk-CRITICAL **: IA__gtk_widget_get_visible: assertion `GTK_IS_WIDGET (widget)' failed
(java:6731): Gtk-CRITICAL **: IA__gtk_widget_get_visible: assertion `GTK_IS_WIDGET (widget)' failed
(java:6731): Gtk-CRITICAL **: IA__gtk_widget_get_visible: assertion `GTK_IS_WIDGET (widget)' failed
Испытав неудачу в этой попытке, я изменилсяOnCloseRequest
вOnHiding
с ожиданием успеха.
primaryStage.setOnHiding(new EventHandler() {
@Override
public void handle(WindowEvent event) {
if (!canExit()) {
event.consume();
primaryStage.show(); // I tried without this line also.
}
}
});
Хотя в этой попытке я тоже почувствовал неудачу, думаю, что добился определенного прогресса. На этот раз сообщений об ошибках нет, и нет необходимости принудительно закрывать приложение из Netbeans.
Затем я прочитал о каком-то магическом методеsetImplicitExit()
вPlatform
учебный класс. Думая, что это то, чего мне не хватало, я попыталсяPlatform.setImplicitExit(false);
с обоими из двух методов следующим образом:
OnCloseRequest
версия
Platform.setImplicitExit(false);
primaryStage.setOnCloseRequest(new EventHandler() {
if (!canExit()) {
// ...
} else {
Platform.exit();
}
});
Нет разницы, сцена закрывается / скрывается, и одно и то же сообщение об ошибке приходит неоднократно.
OnHiding
версия
Platform.setImplicitExit(false);
primaryStage.setOnHiding(new EventHandler() {
if (!canExit()) {
// ...
} else {
Platform.exit();
}
});
Начиная с положительной ноты, приложение невыход, как и раньше. Но минус в том, что сцена все еще закрыта / скрыта.
Теперь у меня нет оружия / снаряжения в моем арсенале, чтобы решить его, и поэтому я здесь, чтобы просить помощи у вас, героев и чемпионов. Итак, как я могу решить эту проблему или что я сделал не так или что мне не хватает?