如果java应用程序是关闭的,但不是靠近框架

时间:2015-07-29 14:30:22

标签: java

我在java中开发一个桌面应用程序,当应用程序被框架关闭时,我有一个事件调用FrameClosing,当用户关闭窗口时创建一个函数,问题是当应用程序由任务管理器关闭时或者当用户关闭窗口,应用程序正在运行,我正在尝试这个。

Runtime.getRuntime().addShutdownHook(new Thread() {

    @Override
    public void run() {

       System.out.println("app was stoped");
    }

});

但它只适用于框架关闭应用程序的情况。我正在阅读关于套接字我的应用程序可以与网站进行通信,如果他们之间的通信,我可以检测到该程序已关闭,但我真的不太关心它 我只想检测我的应用何时停止运行

2 个答案:

答案 0 :(得分:0)

This answer is talking about C++但第二点是重要的部分。如果该程序是通过任务管理器或kill -9被杀死的,那么你可以做的并不多。该程序无法访问该级别,您必须让该程序专门查找该级别。

您是否考虑过设计应用程序,以便意外停机并不是一个交易破坏者,而不是试图解决这个问题?例如,在程序运行时进行中间记录。您可以使用它来确定应用程序在下次运行时是否过早关闭,并在开始工作之前执行必要的操作。

您还可以查看this thread。它谈论通过命令行进行杀戮,但在某些情况下它可能对你有帮助。:

Logically, SIGHUP (terminal hangup) should be raised.

The equivalent of SIGHUP is provided through the callback you register with
SetConsoleCtrlHandler. Your callback function will be called on an 
arbitrary threadpool thread with dwCtrlType = CTRL_CLOSE_EVENT. You've got 
5 seconds to clean-up, you cannot cancel the close.

答案 1 :(得分:0)

您的代码是正确的。如果它是通过任务管理器杀死的,尽管这是故事的结尾。它在运行System.out.println之前被杀死。如果情况并非如此,那么在用户说要杀死它之后你就​​可以做各种各样的事情。