我正在使用一個函數庫來調用庫代碼中的JNI_CreateJavaVM函數。但是,我還需要一些JNI包裝,我需要調用相同的函數JNI_CreateJavaVM以獲取JNIEnv *到我的應用程序。調用JNI_CreateJavaVM函數兩次
但第二個調用失敗。
有人請讓我知道有沒有辦法做到這一點?
注意:庫不支持獲取或設置庫內創建的JNIEnv *。
我正在使用一個函數庫來調用庫代碼中的JNI_CreateJavaVM函數。但是,我還需要一些JNI包裝,我需要調用相同的函數JNI_CreateJavaVM以獲取JNIEnv *到我的應用程序。調用JNI_CreateJavaVM函數兩次
但第二個調用失敗。
有人請讓我知道有沒有辦法做到這一點?
注意:庫不支持獲取或設置庫內創建的JNIEnv *。
不能創建相同的過程不止一個JVM:
從JDK/JRE 1.2,不支持在單個進程中創建多個虛擬機。
雖然使用AttachCurrentThread
函數,但您也許能夠將當前線程附加到現有JVM。有關調用API,請參閱文檔here。
您需要一個指向JavaVM
對象的指針。看看JNI_GetCreatedJavaVMs()
可以幫助你,我不知道這是每個進程(在這種情況下,它只會是一個單一的元素列表)或每臺機器。無論哪種情況,JavaVM
都必須是圖書館正在使用的那個,否則你可能不會做你想做的。如果您可以訪問它,那麼您應該能夠對Java應用程序中的其他對象進行調用,但要確保它是線程安全的。
謝謝verymuch丹尼斯 – 2014-10-09 01:53:41
如果你把一些代碼解釋你在做什麼,我可以看看它 – jgr208 2014-10-08 12:34:42