De prévenir ou d'Annuler la fermeture de la première étape, en JavaFX 2.2

Comme le titre l'indique, ma question est, comment puis-je prévenir ou d'annuler la fermeture de la première étape, en JavaFX 2.2? J'ai fait quelques recherches sur Google, et voici les deux liens semblait répondre à la question:

J'ai essayé les méthodes expliquées par ces deux liens, mais malheureusement pour moi, aucun d'entre eux fonctionne. Alors, sans plus tarder, voici ce que j'avais fait.

Tout d'abord, j'ai essayé de joindre un OnCloseRequest à la primaryStage comme suit.

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

Quand canExit() retourne false, j'ai essayé d'empêcher l'événement de se propager plus loin et cause pour quitter l'application en appelantevent.consume(). Mais la scène est arriver fermé/caché et j'ai eu des messages d'erreur suivants sur Netbeans fenêtre de sortie. Il ne cesse de revenir à plusieurs reprises jusqu'à ce que je me force à fermer l'application à partir 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

Avoir goûté à l'échec de cette tentative, j'ai changé OnCloseRequest à OnHiding avec la perspective de succès.

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

Bien, j'ai goûté l'échec de cette tentative trop, je pense avoir fait quelques progrès. Il n'y a pas de messages d'erreur cette fois, et pas besoin de forcer la fermeture de l'application à partir de Netbeans.

Puis j'ai lu à propos de la magie de la méthode nommée setImplicitExit() dans le Platform classe. Pensant que c'est ce qui me manquait, j'ai essayé Platform.setImplicitExit(false);, avec les deux les deux méthodes comme suit:

  1. OnCloseRequest version

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

    Pas de différence, la scène se ferme/caché, et le même message d'erreur s'affiche à plusieurs reprises.

  2. OnHiding version

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

    Début sur une note positive, l'application à ne pas avoir quitté comme précédemment. Mais, la note négative est que la scène est toujours fermé/caché.

Maintenant, je suis hors d'armes/équipements dans mon manège à résoudre, et je suis donc ici pour demander l'aide de tes héros et champions. Alors, Comment puis-je résoudre ce problème ou qu'ai-je fait de mal ou ce qui me manque?

InformationsquelleAutor Jomoos | 2013-06-08