Запретить / отменить закрытие основного этапа в 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();
    }
});

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

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

Ответы на вопрос(4)

Ваш ответ на вопрос