0

如果一个线程使用设置关闭钩子

Runtime.getRuntime().addShutdownHook();

通过 jna 调用方法:

kernel32.CreateToolhelp32Snapshot (0x00000002, 0)

它使虚拟机崩溃。如果我在

WindowListener.windowClosing()

钩子,调用不会使虚拟机崩溃。

知道为什么吗?

如果有任何用处,我可以发布部分 VM 崩溃错误报告。

编辑:查看pastebin 上的 VM 崩溃报告

4

2 回答 2

0

发布 VM 崩溃报告应该会有所帮助。

于 2009-11-05T16:08:50.873 回答
0

在 pastebin 等上发布部分崩溃报告,也许有些人可以从中获得一些信息。

好吧,我不确定,但是如果您阅读 java 文档addShutdownHook()

关闭挂钩在虚拟机生命周期的一个微妙时刻运行,因此应该进行防御性编码。特别是,它们应该写成线程安全的,并尽可能避免死锁。他们也不应该 盲目依赖可能已经注册了自己的关闭钩子的服务,因此他们自己可能正在关闭的过程中。.... 关闭挂钩也应该快速完成它们的工作。...

这些使我得出的结论是,调用此类方法可能需要来自 JVM 的不再可用的服务,或者此调用花费的时间太长。

于 2009-11-05T16:12:14.963 回答