Schließen der Primärstufe in JavaFX 2.2 verhindern / abbrechen

Wie der Titel schon sagt, lautet meine Frage: Wie kann ich das Schließen der Primärstufe in JavaFX 2.2 verhindern / abbrechen? Ich habe einige Nachforschungen über Google angestellt und die folgenden beiden Links schienen das Problem zu beheben:

Beenden von JavaFX 2 verhindern oder abbrechenThread: JavaFX 2.0 Stage onClose-Ereignis

Ich habe die Methoden ausprobiert, die durch diese beiden Links erklärt wurden, aber leider funktioniert keine von ihnen. Also, ohne weiteres, hier ist, was ich getan hatte.

Erstens habe ich versucht, eine zu befestigenOnCloseRequest zumprimaryStage wie folgt.

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

WanncanExit() kehrt zurückfalseIch habe versucht, die weitere Verbreitung des Ereignisses zu verhindern und die App durch einen Anruf zu beendenevent.consume(). Aber die Bühne wird geschlossen / versteckt und ich bekomme die folgenden Fehlermeldungen im Netbeans-Ausgabefenster. Es kommt immer wieder vor, bis ich die App von Netbeans zwinge, sie zu schließen.

(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

Nachdem ich bei diesem Versuch gescheitert war, änderte ich michOnCloseRequest zuOnHiding mit der Erwartung des Erfolgs.

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

Obwohl ich auch bei diesem Versuch gescheitert bin, denke ich, dass ich einige Fortschritte gemacht habe. Dieses Mal werden keine Fehlermeldungen angezeigt, und Sie müssen das Schließen der Anwendung von Netbeans aus nicht erzwingen.

Dann las ich etwas über eine magische Methode namenssetImplicitExit() in demPlatform Klasse. Ich dachte, dass dies das ist, was mir fehlte, und versuchte esPlatform.setImplicitExit(false); mit beiden Methoden wie folgt:

OnCloseRequest Ausführung

Platform.setImplicitExit(false);

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

Kein Unterschied, die Bühne wird geschlossen / ausgeblendet und die gleiche Fehlermeldung wird wiederholt angezeigt.

OnHiding Ausführung

Platform.setImplicitExit(false);

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

Beginnend mit einer positiven Note, wird die Anwendung nicht mehr so ​​früh beendet. Das Negative ist jedoch, dass die Bühne immer noch geschlossen / versteckt wird.

Jetzt habe ich keine Waffen / Ausrüstungen mehr in meiner Waffenkammer, um das Problem zu lösen, und bin daher hier, um die Hilfe Ihrer Helden und Champions anzufordern. Also, wie kann ich dieses Problem lösen oder was habe ich falsch gemacht oder was fehle ich?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage