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



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



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



Edit:



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



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


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

980   11  

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);

попробовать

 System.exit(0);

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

для меня работает только следующее:

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();
            }

        });

getContentPane.удалить(jfxPanel);

попробуй (:

вы должны переопределить метод "stop ()" в экземпляре приложения, чтобы он работал. Если вы переопределили даже пустой " stop ()", то приложение завершает работу изящно после закрытия последнего этапа (на самом деле последний этап должен быть основным этапом, чтобы он работал полностью, как и предполагалось). Без каких-либо дополнительных платформ.в этом случае необходимы вызовы exit или setOnCloseRequest.

Comments

    Ничего не найдено.