2012-07-26 88 views
0

我和我的創建自定義對象類型ShareStruct的二維數組掙扎:數組對象數組(二維數組)JNI

jobjectArray ret ; 
jobjectArray ins ; 
jobjectArray outs; 

jclass myClass = (*env)->FindClass(env,"org/apache/s4/core/ShareStruct"); 
if (myClass==NULL) fprintf(stderr, "Class ShareStruct not found"); 

jclass myClassArray = (*env)->FindClass(env, "[Lorg/apache/s4/core/ShareStruct"); 
if (myClassArray==NULL) fprintf(stderr, "Class ShareStruct[] not found"); 

ins = (*env)->NewObjectArray(env, in, myClass, NULL); 
outs = (*env)->NewObjectArray(env, out, myClass, NULL); 
ret = (*env)->NewObjectArray(env, 2, myClassArray, NULL); 

第一類裝載作品(該ShareStruct是好的),但其他一個(試圖加載一個ShareStruct []類)沒有。我已經嘗試過和沒有L但沒有運氣。有任何想法嗎?我是JNI的新手。

謝謝!

+0

已更新我的答案,有幫助嗎? – jogabonito 2012-08-03 09:47:52

回答

3

這個jclass myClassArray = (*env)->FindClass(env, "[Lorg/apache/s4/core/ShareStruct");是錯誤的。 創建陣列像做

ret = (*env)->NewObjectArray(env,sizeOfArray,myClass,NULL); 
(*env)->SetObjectArrayElement(env, ret,index, sharedStructObj); 

這裏sharedStructObj必須由NEWOBJECT創建。
JNI programmer's guide第3.3.5具有良好的相關例子

這也是基於評論不錯Create, populate and return 2D String array from native code (JNI/NDK)

編輯

in = (*env)->NewObjectArray(env,sizeOfArray,myClass,NULL); 
out = (*env)->NewObjectArray(env,sizeOfArray,myClass,NULL); 
ret= (*env)->NewObjectArray(env,sizeOfArray,myClass,NULL); 
(*env)->SetObjectArrayElement(env, ret,0, in); 
(*env)->SetObjectArrayElement(env, ret,1, out); 
+0

但是我想創建一個ShareStruct []的數組,所以java的等價物就是ShareStruct [] []。我沒有看到這個代碼請問是:( 實際上,我想做的事: ShareStruct []中; ShareStruct []出; ShareStruct [] [] RET; RET [0] =在; ret [1] = out; – user1018513 2012-07-27 10:56:01

+0

這是一個很好的答案,但是「JNI程序員指南第3.3.5節有一個很好的相關例子」,鏈接已經在2016-05-18截止 – CloudyTrees 2016-05-18 21:34:41

1

你必須使用一個對象數組的數組外:

jclass myClassArray = (*env)->FindClass(env, "[Ljava/lang/Object;");

與2D String數組類似的情況下工作。請同時識別字符串中的尾部分號。

+0

你有沒有參考文檔爲此? – Federico 2017-11-21 13:58:58