How to close a JavaFX application on window close?

2019-06-27 11:19发布

在Swing中,你可以简单地使用setDefaultCloseOperation()时关闭窗口关闭整个应用程序。

然而,在JavaFX的我无法找到一个等效。 我打开了多个窗口,我想如果是关闭一个窗口关闭整个应用程序。 什么是做,在JavaFX的方式?

编辑:

我明白,我可以覆盖setOnCloseRequest()对窗口关闭执行某些操作。 现在的问题是应该执行什么操作终止整个应用程序?

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

stop()中定义的方法Application类什么都不做。

Answer 1:

当最后一个应用程序会自动停止Stage被关闭。 在这一刻, stop()你的方法Application类被调用,所以你并不需要一个相当于setDefaultCloseOperation()

如果要停止之前的应用程序,你可以调用Platform.exit()例如在你的onCloseRequest通话。

你可以拥有的javadoc的页面上的所有信息,这些Application : http://docs.oracle.com/javafx/2/api/javafx/application/Application.html



Answer 2:

有些提供的答案并没有为我工作(javaw.exe的仍在运行关闭窗口后),或月食显示异常的应用程序关闭后。

在另一方面,这完美的作品:

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


Answer 3:

作为参考,在这里是用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...
}


Answer 4:

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


Answer 5:

你试试这个.. setOnCloseRequest

setOnCloseRequest(EventHandler<WindowEvent> value)   

有一个例子



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


Answer 7:

这似乎为我工作:

EventHandler<ActionEvent> quitHandler = quitEvent -> {

        System.exit(0);

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


Answer 8:

尝试

 System.exit(0);

这应该终止线程主体并结束主程序



Answer 9:

getContentPane.remove(jfxPanel);

试试吧 (:



Answer 10:

对我来说,只有以下工作:

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


Answer 11:

必须重写“停止()”方法在你的应用实例,以它的工作原理。 如果你已经覆盖甚至是空的“停止()”,那么应用程序正常关闭的最后阶段关闭后(实际上是最后阶段必须是初级阶段,使其工作完全在应该是)。 没有任何额外的Platform.exit或setOnCloseRequest呼叫需要在这种情况下。



文章来源: How to close a JavaFX application on window close?