2

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

谢谢!

4

3 回答 3

5

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)创建、填充和返回二维字符串数组

根据评论编辑

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); 
于 2012-07-27T07:07:34.863 回答
1

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

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

在类似的情况下,二维字符串数组对我有用。还请识别字符串中的尾随分号。

于 2013-08-21T14:28:57.580 回答
1

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

jclass myClassArray = (*env)->FindClass(env, "[Lorg/apache/s4/core/ShareStruct;");
于 2018-03-21T15:17:03.713 回答