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

我正在努力创建自定义对象类型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的新手。

谢谢!

这个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程序员指南的 3.3.5节有一个很好的相关例子

这也很好从本机代码(JNI / NDK)创建,填充和返回2D String数组

编辑基于评论

 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); 

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

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

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

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

 jclass myClassArray = (*env)->FindClass(env, "[Lorg/apache/s4/core/ShareStruct;");