Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaFx中捕获强制退出或意外关闭事件?_Java_Javafx 2 - Fatal编程技术网

如何在JavaFx中捕获强制退出或意外关闭事件?

如何在JavaFx中捕获强制退出或意外关闭事件?,java,javafx-2,Java,Javafx 2,我正在制作一个桌面应用程序,它具有服务器的登录和注销功能 每当有人关闭窗口时,我需要从应用程序中注销,因此我使用这些代码 primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent event) { event.consume();

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

每当有人关闭窗口时,我需要从应用程序中注销,因此我使用这些代码

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
                @Override
                public void handle(WindowEvent event) {
                    event.consume();
                    closeWindow();
                }
            });
primaryStage.setOnCloseRequest(新的EventHandler(){
@凌驾
公共无效句柄(WindowEvent事件){
event.consume();
关闭窗口();
}
});
其中closeWindow()包含注销和其他相关步骤

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


JavaFX是否有任何事件需要捕获强制退出或意外关闭?或者,如果有任何方法可以停止它?

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

这里有一些例子,例如..

有一种方法

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

在应用程序类中。

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

我尝试过使用shutdown hook,但当我从TaskManager关闭应用程序时,它不起作用。我们认为,当操作系统杀死一个进程时,smth是没有希望的。如果你不知道任何关于操作系统的理论,你可以阅读它,但很快就会说,当操作系统打算杀死一个进程时,这已经完成,当你使用TaskManager时,进程停止并从OM中删除后,进程使用的资源将变为可用资源。通常情况下,在此之前没有机会运行任何关于客户机/服务器应用程序的代码:您应该跟踪服务器上的会话,并且不应该依赖客户机的行为。因此,在操作系统终止进程之前,没有机会执行任何功能?若我在服务器上跟踪会话,那个就好了,当然我会这样做。Shreyas,有不同的原因,为什么客户端可以停止响应:断电、网络故障、windows上的蓝屏死机。。在一般情况下,你不应该太依赖客户。如果您有安全问题,您应该特别了解客户机-服务器通信。。。。
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);
    }
}