6

我正在制作一个具有服务器登录和注销功能的桌面应用程序。

每当有人关闭窗口时,我都需要从应用程序中注销,所以我正在使用这些代码

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
                @Override
                public void handle(WindowEvent event) {
                    event.consume();
                    closeWindow();
                }
            });

其中 closeWindow() 包含注销和其他相关步骤。

现在,当应用程序意外关闭或有人从任务管理器强行退出/关闭它(通过结束进程)时,就会出现问题。

JavaFX 是否有任何事件可以捕获强制退出或意外关闭?或者有什么方法可以阻止它?

4

4 回答 4

4

当您的应用程序通过TaskManager您唯一的选择关闭时,您将使用 VM 的关闭挂钩

周围有一些例子,例如here

于 2013-02-25T12:07:24.880 回答
3

有一种方法

@Override
public void stop() throws Exception {
    super.stop();
    System.out.println("logout");
}

在应用程序类中。

于 2013-02-25T12:07:56.963 回答
2
public class Gui extends Application {

    static {
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                closeWindow();
            }
        });
    }

    @Override
    public final void start(Stage primaryStage) throws Exception {
        // ...
    }

    @Override
    public void stop() throws Exception {
        // ...
        System.exit(0);
    }
}
于 2016-05-17T07:40:11.747 回答
0

如果您正在为该注销过程使用任务,请尝试使用setDaemon方法。我通过显示“加载”窗口并在任务完成后关闭该窗口解决了类似的情况。你也可以试试。

于 2013-02-26T15:08:55.607 回答