Я пишу клиентское приложение с использованием Java Swing. Меня очень смущает, как программа запуска может собирать информацию о сбое JVM при сбое JVM.
Файл hs_err_pid[PID].log не создается. Я считаю, что моя программа запуска C++ завершается нормально. Структура проекта
Мне все еще не удается записать информацию об исключении. Я считаю, что JVM вышел из строя и завершил работу, а исключение генерируется асинхронно в отдельном потоке.
Как я могу получить информацию о выходе из сбоя JVM с помощью средства запуска C++?
Я пишу клиентское приложение с использованием Java Swing. Меня очень смущает, как программа запуска может собирать информацию о сбое JVM при сбое JVM. Файл hs_err_pid[PID].log не создается. Я считаю, что моя программа запуска C++ завершается нормально. [b]Структура проекта[/b] [img]https://i.sstatic.net/cbE7cqgY.png[/img]
[b]Простой код запуска C++[/b] [code]#include #include #include #include
// 5. start jvm and run JavaVM* jvm; JNIEnv* env; if (createVM(&jvm, (void**)&env, &vmArgs) >= 0) { jclass mainClass = env->FindClass("com/example/code/Application"); if (mainClass) { jmethodID mainMethod = env->GetStaticMethodID(mainClass, "main", "([Ljava/lang/String;)V"); if (mainMethod) { // call main method jobjectArray args = env->NewObjectArray(0, env->FindClass("java/lang/String"), NULL); env->CallStaticVoidMethod(mainClass, mainMethod, args); //I can’t capture the exception because I believe the JVM has already crashed and exited. if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear(); MessageBoxW(NULL, L"JVM crashed!", L"error", MB_OK | MB_ICONERROR); } } } else { MessageBoxW(NULL, L"not find main !!!", L"error", MB_OK | MB_ICONERROR); } jvm->DestroyJavaVM(); }
FreeLibrary(hJvmDll); return 0; } [/code] Я только что смоделировал исключение здесь: [img]https://i.sstatic.net/bmesgr5U.png[/img]
[b]Код обработки исключений[/b] [code] if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear(); MessageBoxW(NULL, L"JVM crashed!", L"error", MB_OK | MB_ICONERROR); } [/code] Мне все еще не удается записать информацию об исключении. Я считаю, что JVM вышел из строя и завершил работу, а исключение генерируется асинхронно в отдельном потоке. Как я могу получить информацию о выходе из сбоя JVM с помощью средства запуска C++?