Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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
Java:对进程死亡采取行动?_Java - Fatal编程技术网

Java:对进程死亡采取行动?

Java:对进程死亡采取行动?,java,Java,我正在调试一个Java应用程序,它经常涉及终止进程。我想在应用程序死掉之前做一些清理。是否有办法捕捉事件并作出相应反应?(有点像在Python中捕捉键盘中断 更新:我尝试将此添加到main(),但似乎不起作用: Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { System.out.println("Cl

我正在调试一个Java应用程序,它经常涉及终止进程。我想在应用程序死掉之前做一些清理。是否有办法捕捉事件并作出相应反应?(有点像在Python中捕捉
键盘中断

更新:我尝试将此添加到
main()
,但似乎不起作用:

Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                System.out.println("Closing...");
            }
        });
代码无法运行。

您可以尝试使用

请注意,这并不能保证你的钩子会被调用,所以没有防弹的方法来100%确保你的清理工作会真正完成


JVM可以执行清理的时间有限,如果您试图在钩子中执行太多操作,不要期望它会完成。

如果您通过“停止”停止进程按钮,则关机钩子将不会运行。据我所知,在这种情况下没有任何方法运行钩子-它几乎会杀死JVM,而没有清理的机会。如果您是从命令行运行,CTRL+C将起作用,但我认为您在Eclipse中无法很好地做到这一点

丑陋的黑客:

在main的开头添加如下内容:

    JFrame killer = new JFrame("Killer");
    killer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    killer.setSize(100, 100);
    killer.setVisible(true);

关闭结果窗口将触发System.exit(),这应该允许关闭挂钩运行。当然,如果程序挂起在调试器中,这将不起作用。YMMV。

可能重复您是如何终止进程的?@developmentalinsanity在Eclipse中遇到了红色块。@Rosarch那么您可能运气不好。如果您像那样停止它,我认为您没有机会做任何事情t、 就我所知,它几乎杀死了JVM。@Rosarch,除非我刚刚发布的作为答案的丑陋的黑客有任何用处