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-EreignisIch 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ückfalse
Ich 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?