Как закрыть приложение JavaFX при закрытии окна?
в Swing вы можете просто использовать setDefaultCloseOperation() для завершения работы всего приложения при закрытии окна.
однако в JavaFX я не могу найти эквивалент. У меня открыто несколько окон, и я хочу закрыть все приложение, если окно закрыто. Как это сделать в JavaFX?
Edit:
Я понимаю, что могу переопределить setOnCloseRequest() для выполнения некоторых операций при закрытии окна. Вопрос в том, какая операция должна быть выполнена для завершения все приложение?
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
stop();
}
});
The stop() метод, определенный в Application класс ничего не делает.
11 ответов:
приложение автоматически останавливается, когда последний
Stageзакрыт. В этот моментstop()методApplicationкласс называется, так что вам не нужно эквивалентsetDefaultCloseOperation()если вы хотите остановить приложение до этого, вы можете позвонить
Platform.exit(), например вonCloseRequestзвонок.вы можете иметь всю эту информацию на странице javadoc
Application: http://docs.oracle.com/javafx/2/api/javafx/application/Application.html
некоторые из предоставленных ответов не работали для меня (javaw.exe все еще работает после закрытия окна) или eclipse показал исключение после закрытия приложения.
С другой стороны, это прекрасно работает:
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent t) { Platform.exit(); System.exit(0); } });
Для справки-минимальная реализация с использованием Java 8 :
@Override public void start(Stage mainStage) throws Exception { Scene scene = new Scene(new Region()); mainStage.setWidth(640); mainStage.setHeight(480); mainStage.setScene(scene); //this makes all stages close and the app exit when the main stage is closed mainStage.setOnCloseRequest(e -> Platform.exit()); //add real stuff to the scene... //open secondary stages... etc... }
stage.setOnCloseRequest(new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent event) { Platform.exit(); System.exit(0); } }
вы пробовали это.. setOnCloseRequest
setOnCloseRequest(EventHandler<WindowEvent> value)есть один пример
С помощью Java 8 это сработало для меня:
@Override public void start(Stage stage) { Scene scene = new Scene(new Region()); stage.setScene(scene); /* ... OTHER STUFF ... */ stage.setOnCloseRequest(e -> { Platform.exit(); System.exit(0); }); }
это, казалось, работало для меня:
EventHandler<ActionEvent> quitHandler = quitEvent -> { System.exit(0); }; // Set the handler on the Start/Resume button quit.setOnAction(quitHandler);
для меня работает только следующее:
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent event) { Platform.exit(); Thread start=new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub System.exit(0); } }); start.start(); } });
вы должны переопределить метод "stop ()" в экземпляре приложения, чтобы он работал. Если вы переопределили даже пустой " stop ()", то приложение завершает работу изящно после закрытия последнего этапа (на самом деле последний этап должен быть основным этапом, чтобы он работал полностью, как и предполагалось). Без каких-либо дополнительных платформ.в этом случае необходимы вызовы exit или setOnCloseRequest.
Comments