here で説明されているように、JNI を介して Java VM を作成する C++ プログラム (Win32、MS Visual Studio 2008) を開発しています。Java 6 と Java 7 の両方で、長い間正常に動作しています。
今日、新しいバージョンの JRE をインストールしました。インストーラーで何か問題が発生し、JRE が破損しました。C++ プログラムが起動せず、警告メッセージも表示されないことに気付きました。プログラムをデバッグすると、JNI_CreateJavaVM
呼び出しまで正常に実行されることが示されました。ただし、呼び出すJNI_CreateJavaVM
と、プログラムは即座に終了します。戻り値も、エラー メッセージも、何もありません。
はい、JRE を再インストールするだけでよいことはわかっています。それでも、私の C++ プログラムはそのような状況に備えてほしいと思います。Java VM を作成できない場合は、「JRE を再インストールしてください」というメッセージが表示されます。しかし、プログラム全体が終了しているため、そのメッセージを表示する機会がありません。
JRE、またはより一般的にはサードパーティのライブラリでそのようなタイプのエラーを検出する方法はありますか? C++try/catch
コンストラクトを使用してみました。シグナル関数を使用してみましたが、何も役に立ちません。プログラムは、catch ハンドラまたはシグナル ハンドラを呼び出さずに消えます。
そのような JRE クラッシュを検出する方法はありますか? または: サードパーティ ライブラリ内のクラッシュまたは終了を確実に検出する方法はありますか?