2014-10-08 168 views
1

我正在使用一個函數庫來調用庫代碼中的JNI_CreateJavaVM函數。但是,我還需要一些JNI包裝,我需要調用相同的函數JNI_CreateJavaVM以獲取JNIEnv *到我的應用程序。調用JNI_CreateJavaVM函數兩次

但第二個調用失敗。

有人請讓我知道有沒有辦法做到這一點?

注意:庫不支持獲取或設置庫內創建的JNIEnv *。

+0

如果你把一些代碼解釋你在做什麼,我可以看看它 – jgr208 2014-10-08 12:34:42

回答

2

不能創建相同的過程不止一個JVM:

從JDK/JRE 1.2,不支持在單個進程中創建多個虛擬機。

雖然使用AttachCurrentThread函數,但您也許能夠將當前線程附加到現有JVM。有關調用API,請參閱文檔here

您需要一個指向JavaVM對象的指針。看看JNI_GetCreatedJavaVMs()可以幫助你,我不知道這是每個進程(在這種情況下,它只會是一個單一的元素列表)或每臺機器。無論哪種情況,JavaVM都必須是圖書館正在使用的那個,否則你可能不會做你想做的。如果您可以訪問它,那麼您應該能夠對Java應用程序中的其他對象進行調用,但要確保它是線程安全的。

+0

謝謝verymuch丹尼斯 – 2014-10-09 01:53:41