我正在通過JNI從C++代碼啓動JVM。我有一個問題,就是在退出我的C++進程時,似乎JVM的一些關閉鉤子沒有運行,因此一些臨時資源仍然存在,在我的特殊情況下,下次打開C++進程時會阻止啓動JVM。 我試過jvm-> DestroyJavaVM(),但是在我的所有進程窗口關閉後,我仍然可以看到進程正在運行。什麼是最好的等待,以確保JVM通過JNI啓動時能夠正確關閉?從C++啓動時正確關閉JVM
謝謝!
我正在通過JNI從C++代碼啓動JVM。我有一個問題,就是在退出我的C++進程時,似乎JVM的一些關閉鉤子沒有運行,因此一些臨時資源仍然存在,在我的特殊情況下,下次打開C++進程時會阻止啓動JVM。 我試過jvm-> DestroyJavaVM(),但是在我的所有進程窗口關閉後,我仍然可以看到進程正在運行。什麼是最好的等待,以確保JVM通過JNI啓動時能夠正確關閉?從C++啓動時正確關閉JVM
謝謝!
首先,jvm->DestroyJavaVM()
將不會返回,直到所有非守護進程jvm線程都停止,它只會等待它們停止,所以您應該在java中停止它們。
其次,System.exit
將導致整個過程被關閉。
所以你真正需要的是檢查你的java代碼哪些線程還沒有停止,例如UI框架的背景消息循環線程,如gwt
或swing
。
最簡單的方法是通過JNI調用System.exit
。