Я пишу клиентское программное обеспечение с использованием Java Swing. Меня очень смущает, как программа запуска может собирать информацию о сбое JVM при сбое JVM.
Файл hs_err_pid[PID].log не создается. Я считаю, что моя программа запуска C++ завершается нормально.
структуры проекта:
Я все еще не могу записать информацию об исключении, так как считаю, что JVM произошел сбой и завершил работу, а исключение генерируется в отдельном потоке асинхронно.
Я считаю, что JVM аварийно завершился асинхронно в отдельном потоке. Как получить информацию о выходе из аварийного завершения JVM с помощью средства запуска C++???
Я пишу клиентское программное обеспечение с использованием Java Swing. Меня очень смущает, как программа запуска может собирать информацию о сбое JVM при сбое JVM. Файл hs_err_pid[PID].log не создается. Я считаю, что моя программа запуска C++ завершается нормально. структуры проекта: [img]https://i.sstatic.net/cbE7cqgY.png[/img]
простой код запуска C++: [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]
получите метод exp: [code] if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear(); MessageBoxW(NULL, L"JVM crashed!", L"error", MB_OK | MB_ICONERROR); } [/code] Я все еще не могу записать информацию об исключении, так как считаю, что JVM произошел сбой и завершил работу, а исключение генерируется в отдельном потоке асинхронно. Я считаю, что JVM аварийно завершился асинхронно в отдельном потоке. [b]Как получить информацию о выходе из аварийного завершения JVM с помощью средства запуска C++???[/b]