对象数组(2d数组)JNI数组

时间:2012-07-26 09:54:59

标签: java arrays java-native-interface

我正在努力创建自定义对象类型ShareStruct的二维数组:

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的新手。

谢谢!

3 个答案:

答案 0 :(得分:3)

jclass myClassArray = (*env)->FindClass(env, "[Lorg/apache/s4/core/ShareStruct");错了。 要创建数组,请执行类似

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

这里必须使用newObject创建sharedStructObj 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); 

答案 1 :(得分:1)

您必须为外部数组使用对象数组:

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

在类似的情况下,2D String数组为我工作。还请识别字符串中的尾随分号。

答案 2 :(得分:0)

我不知道这个问题是否仍然相关,但我认为你只是忘记了数组类规范末尾的分号:

pc