Prevenir / cancelar el cierre de la etapa primaria en JavaFX 2.2

Como dice el título, mi pregunta es, ¿cómo puedo evitar / cancelar el cierre de la etapa primaria en JavaFX 2.2? He investigado un poco en Google, y los siguientes dos enlaces parecían abordar el problema:

Prevenir o cancelar la salida de JavaFX 2Tema: JavaFX 2.0 Stage onClose evento

Probé los métodos explicados por esos dos enlaces, pero lamentablemente para mí, ninguno de ellos funciona. Así que, sin más preámbulos, aquí está lo que había hecho.

En primer lugar, traté de adjuntar unOnCloseRequest alprimaryStage como sigue.

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {
        if (!canExit()) {
            event.consume();
            primaryStage.show(); // I tried without this line also.
        }
    }
});

CuandocanExit() devolucionesfalse, Traté de evitar que el evento se siguiera propagando y hacer que salga de la aplicación llamandoevent.consume(). Pero el escenario se está cerrando / ocultando y recibí los siguientes mensajes de error en la ventana de salida de Netbeans. Sigue viniendo repetidamente hasta que fuerzo a cerrar la aplicación de 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

Habiendo probado el fracaso en este intento, cambiéOnCloseRequest aOnHiding Con la expectativa de éxito.

primaryStage.setOnHiding(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {
        if (!canExit()) {
            event.consume();
            primaryStage.show(); // I tried without this line also.
        }
    }
});

Aunque también probé el fracaso en este intento, creo que he progresado un poco. No hay mensajes de error esta vez, y no es necesario forzar el cierre de la aplicación desde Netbeans.

Luego leí sobre un método mágico llamadosetImplicitExit() en elPlatform clase. Pensando que esto es lo que me faltaba, lo intenté.Platform.setImplicitExit(false); con los dos métodos siguientes:

OnCloseRequest versión

Platform.setImplicitExit(false);

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    if (!canExit()) {
        // ...
    } else {
        Platform.exit();
    }
});

No hay diferencia, la etapa se cierra / oculta, y el mismo mensaje de error aparece repetidamente.

OnHiding versión

Platform.setImplicitExit(false);

primaryStage.setOnHiding(new EventHandler<WindowEvent>() {
    if (!canExit()) {
        // ...
    } else {
        Platform.exit();
    }
});

Comenzando con una nota positiva, la aplicación no se cierra como antes. Pero, la nota negativa es que el escenario todavía se está cerrando / ocultando.

Ahora, me he quedado sin armas / equipos en mi arsenal para resolverlo, y por eso estoy aquí para solicitar la ayuda de sus héroes y campeones. Entonces, ¿cómo puedo resolver este problema o qué he hecho mal o qué me estoy perdiendo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta