2016-05-02 20 views
1

So habe ich 2 Stufen, eine ist die Hauptbühne und die andere ist ein Pop-up-Bildschirm. Wenn der Popup-Bildschirm angezeigt wird, können Sie ihn schließen, indem Sie das "x" oben links (oder oben rechts, je nach Betriebssystem) drücken. Gibt es eine Möglichkeit, die Hauptbühne zu schließen, wenn Sie den Popup-Bildschirm schließen?Schließen Sie die Plattform nach dem Schließen eines Popups | JavaFX

+1

Rufen Sie 'Platform.exit()' im close-Hook auf ('popup.setOnCloseRequest (...)'). – Ironcache

+0

'onCloseRequest' ist hier nicht wirklich das richtige Ereignis: Das wird aufgerufen, wenn der Benutzer auf die Schließen-Schaltfläche für das Popup klickt. An diesem Punkt kann ein Veto eingelegt werden, sodass das Popup möglicherweise nicht wirklich schließt. Sie sollten 'onHidden()' verwenden. –

Antwort

2

Stage und Popup erben ein onHidden property von Window. Dies ist ein Handler, der sofort aufgerufen wird, nachdem das Fenster ausgeblendet wurde (durch irgendeinen Mechanismus). Sie können Platform.exit() im Handler aufrufen, um die Anwendung zu beenden:

popup.setOnHidden(event -> Platform.exit()); 

Beachten Sie, dass Platform.exit() allgemein System.exit(0) bevorzugt wird: Aufruf System.exit(...) wird die Application ‚s stop() Methode nicht zulassen, dass aufgerufen werden, so dass Sie jede umgehen kann Ressourcenbereinigung, die Ihre Anwendung durchführt.

+0

Welches ist besser in der Regel zwischen 'Platform.exit()' und 'System.exit (...)' zu verwenden? Ich habe einige Stackoverflow-Fragen gelesen und festgestellt, dass [einige Leute] (http://stackoverflow.com/questions/14938279/javafx-application-still-running-after-close) beide verwenden. Und einige von ihnen sind nicht daran interessiert es zu benutzen, da es manchmal nicht funktioniert. –

+0

Vielen Dank, das hat den Job gemacht! – Karatawi

1

Es gibt ein Ereignis mit dem Namen setOnCloseRequest. Wenn Sie ein Alert Popup-Fenster öffnen.

Alert popup = new Alert(AlertType.INFORMATION); 

Dann ist Ihre Lösung:

alert.setOnCloseRequest(new EventHandler<DialogEvent>() 
{ 
    @Override 
    public void handle(DialogEvent t) 
    { 
     System.exit(0); 
    } 
}); 

Else, wenn Sie ein anderes Fenster schließen möge mit seinem Besitzer, dann benutzen Sie einfach es ist stage und ersetzen DialogEvent mit WindowEvent.

+1

'onCloseRequest' ist nicht das richtige Ereignis, das hier verwendet wird: Es wird nur aufgerufen, wenn eine" externe "Anfrage zum Schließen des Fensters vorliegt; normalerweise bedeutet dies, dass der Benutzer die Taste zum Schließen des systemeigenen Fensters drückt. Es ist möglich, die Anfrage zu verweigern, in welchem ​​Fall der 'onCloseRequest'-Handler aufgerufen wird, obwohl das Fenster nicht geschlossen wird. –

Verwandte Themen