Как гласит название, мой вопрос в том, как я могу предотвратить/отменить закрытие основного этапа в JavaFX 2.2? Я провел некоторое исследование в Google, и следующие две ссылки, похоже, решили проблему:
Я пробовал методы, объясненные этими двумя ссылками, но, к сожалению, для меня никто не работает. Итак, без дальнейших церемоний, вот что я сделал.
Во-первых, я попытался прикрепить OnCloseRequest
к primaryStage
следующим образом.
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@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<WindowEvent>() {
@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<WindowEvent>() { if (!canExit()) { // ... } else { Platform.exit(); } });
Нет разницы, этап закрывается/скрывается, и одно и то же сообщение об ошибке появляется повторно.
-
OnHiding
версияPlatform.setImplicitExit(false); primaryStage.setOnHiding(new EventHandler<WindowEvent>() { if (!canExit()) { // ... } else { Platform.exit(); } });
Начиная с положительной ноты, приложение не выходит из него, как раньше. Но отрицательная нота заключается в том, что этап все еще закрывается/скрывается.
Теперь я из оружия/экипировки в своем арсенале, чтобы решить это, и поэтому я здесь, чтобы просить помощи у вас, героев и чемпионов. Итак, как я могу решить эту проблему или что я сделал неправильно или что мне не хватает?