0

スレッドが以下を使用してシャットダウン フックを設定する場合

Runtime.getRuntime().addShutdownHook();

メソッドを jna 経由で呼び出します。

kernel32.CreateToolhelp32Snapshot (0x00000002, 0)

VM がクラッシュします。で同じメソッドを呼び出すと、

WindowListener.windowClosing()

フックを使用しても、呼び出しによって VM がクラッシュすることはありません。

理由はありますか?

VM クラッシュ エラー レポートの一部が役立つ場合は、投稿できます。

編集: Pastebin の VM クラッシュ レポートを参照してください

4

2 に答える 2

0

VM クラッシュ レポートを投稿すると役立つはずです。

于 2009-11-05T16:08:50.873 に答える
0

クラッシュレポートの一部をペーストビンなどに投稿すると、そこから情報を得ることができるかもしれません。

よくわかりませんが、Javaドキュメントを読んだらaddShutdownHook()

シャットダウン フックは、仮想マシンのライフ サイクルの微妙な時期に実行されるため、防御的にコーディングする必要があります。特に、それらはスレッドセーフであり、可能な限りデッドロックを回避するように作成する必要があります。また 、独自のシャットダウン フックを登録した可能性があるサービスに盲目的に依存してはなりません。.... シャットダウン フックもすばやく作業を終了する必要があります。...

これらは、おそらくそのようなメソッドを呼び出すには、もう利用できないJVMからのサービスが必要であるか、この呼び出しに時間がかかりすぎるという結論に導きます。

于 2009-11-05T16:12:14.963 に答える