繁体   English   中英

对象数组数组(二维数组)JNI

[英]Array of Object Array (2d arrays) 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字符串数组也很不错

根据评论进行编辑

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM