首页 > 解决方案 > 如何弄清楚为什么我的 Java 应用程序在退出后继续运行?

问题描述

我正在为 Windows 开发 Java 桌面应用程序,并且正在尝试实现 Windows 重新启动管理器。我成功接收到退出应用程序的 Windows 消息,当我手动发送它们时,它正常工作并且应用程序关闭。

当我作为卸载过程的一部分执行此操作时,我的应用程序中的关闭过程会运行,我什至可以看到它调用System.exit(0),但即使在那之后,还有一个过程不会停止。我的 Java 应用程序使用 launch4j 打包到一个可执行文件中,以防万一。

我知道System.exit(0)被调用的方式是因为我正在将调试信息转储到一个文件中,并且我打印出System.exit(0)即将被调用的内容,并且我可以看到应用程序在正确关闭时是成功还是失败。

使用 Process Explorer 我可以看到javaw.exe子进程,当退出过程发生时,它消失了,但父进程仍然存在。在运行时,它看起来像这样:

在此处输入图像描述

退出失败后,它看起来像这样:

在此处输入图像描述

如果我有一个远程调试器连接到进程,此时,调试器将断开连接。

这可能是什么原因造成的?

我几乎确信这是launch4j中的一个错误,所以,我在这里报告了它:https ://sourceforge.net/p/launch4j/bugs/185/

标签: javawinapilaunch4j

解决方案


推荐阅读