我怎样才能弄清楚为什么我的Java应用程序在退出后继续运行?

我怎样才能弄清楚为什么我的Java应用程序在退出后继续运行?,java,winapi,launch4j,Java,Winapi,Launch4j,我正在为Windows开发Java桌面应用程序,并尝试实现Windows重启管理器。我正在成功地接收退出应用程序的Windows消息,当我手动发送这些消息时,它将正常工作,应用程序将关闭 当我作为卸载过程的一部分执行此操作时,应用程序中的关闭过程会运行,我甚至可以看到它调用System.exit(0),但即使在这之后,仍有一个过程不会停止。如果相关的话,我的Java应用程序将使用launch4j打包成一个可执行文件 我之所以知道调用了System.exit(0),是因为我正在将调试信息转储到一个

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

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

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

使用Process Explorer,我可以看到
javaw.exe
子进程,当退出过程发生时,它会消失,但父进程仍然存在。在运行时,其外观如下所示:

退出失败后,看起来是这样的:

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

这可能是什么原因造成的

我几乎确信这是launch4j中的一个bug,因此,我在这里报告了它: