如果一个线程使用设置关闭钩子
Runtime.getRuntime().addShutdownHook();
通过 jna 调用方法:
kernel32.CreateToolhelp32Snapshot (0x00000002, 0)
它使虚拟机崩溃。如果我在
WindowListener.windowClosing()
钩子,调用不会使虚拟机崩溃。
知道为什么吗?
如果有任何用处,我可以发布部分 VM 崩溃错误报告。
编辑:查看pastebin 上的 VM 崩溃报告
如果一个线程使用设置关闭钩子
Runtime.getRuntime().addShutdownHook();
通过 jna 调用方法:
kernel32.CreateToolhelp32Snapshot (0x00000002, 0)
它使虚拟机崩溃。如果我在
WindowListener.windowClosing()
钩子,调用不会使虚拟机崩溃。
知道为什么吗?
如果有任何用处,我可以发布部分 VM 崩溃错误报告。
编辑:查看pastebin 上的 VM 崩溃报告
发布 VM 崩溃报告应该会有所帮助。
在 pastebin 等上发布部分崩溃报告,也许有些人可以从中获得一些信息。
好吧,我不确定,但是如果您阅读 java 文档addShutdownHook()
关闭挂钩在虚拟机生命周期的一个微妙时刻运行,因此应该进行防御性编码。特别是,它们应该写成线程安全的,并尽可能避免死锁。他们也不应该 盲目依赖可能已经注册了自己的关闭钩子的服务,因此他们自己可能正在关闭的过程中。.... 关闭挂钩也应该快速完成它们的工作。...
这些使我得出的结论是,调用此类方法可能需要来自 JVM 的不再可用的服务,或者此调用花费的时间太长。