Подтвердить что ты не робот

Как закрыть приложение JavaFX при закрытии окна?

В Swing вы можете просто использовать setDefaultCloseOperation() для закрытия всего приложения, когда окно закрыто.

Однако в JavaFX я не могу найти эквивалент. У меня открыто несколько окон, и я хочу закрыть все приложение, если окно закрыто. Каков способ сделать это в JavaFX?

Edit:

Я понимаю, что я могу переопределить setOnCloseRequest(), чтобы выполнить некоторую операцию при закрытии окна. Вопрос в том, какая операция должна выполняться для завершения всего приложения?

stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {
        stop();
    }
});

Метод stop(), определенный в классе Application, ничего не делает.

4b9b3361

Ответ 1

Приложение автоматически останавливается, когда последний Stage закрыт. В данный момент вызывается метод stop() вашего класса Application, поэтому вам не нужен эквивалент setDefaultCloseOperation()

Если вы хотите остановить приложение до этого, вы можете вызвать Platform.exit(), например, в своем вызове onCloseRequest.

Вы можете получить всю эту информацию на странице javadoc Application: http://docs.oracle.com/javafx/2/api/javafx/application/Application.html

Ответ 2

Для справки, вот минимальная реализация с использованием 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...
}

Ответ 3

Некоторые из предоставленных ответов не работали для меня (javaw.exe все еще работает после закрытия окна), или eclipse показало исключение после закрытия приложения.

С другой стороны, это отлично работает:

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

Ответ 4

public void handle(WindowEvent event) {
    Platform.exit();
    System.exit(0);
}

Ответ 5

Вы попробовали это. setOnCloseRequest

setOnCloseRequest(EventHandler<WindowEvent> value)   

Существует один пример

Ответ 6

Используя 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);
    });
}

Ответ 7

Казалось, это сработало для меня:

EventHandler<ActionEvent> quitHandler = quitEvent -> {

        System.exit(0);

    };
    // Set the handler on the Start/Resume button
    quit.setOnAction(quitHandler);

Ответ 8

Try

 System.exit(0);

это должно прервать основную строку потока и завершить основную программу

Ответ 9

Вы ДОЛЖНЫ переопределить метод stop() в своем экземпляре приложения, чтобы он работал. Если вы переопределили даже пустую "stop()", приложение прекратило изящество после закрытия последнего этапа (на самом деле последний этап должен быть основным этапом, чтобы он работал полностью, как предполагалось). Никаких дополнительных вызовов Platform.exit или setOnCloseRequest не требуется в этом случае.