java - 对象数组的数组(二维数组)JNI

标签 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 和不带 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);  

这里必须通过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); 

关于java - 对象数组的数组(二维数组)JNI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11666821/

相关文章:

java - 如何获取 Bing Ads API 的开发人员 key

java - Android 与 iOS 中 View 的位置?

java - 测试随机数生成器

C - 获取目录路径

java - 二维 Java 数组。将负数转为零

java - 在 Java 中使用 String 创建我自己的 BigInteger

java - 如何在 JNI 中访问 jobject 的值

java - Bazel:具有 JNI 依赖项的 Java 应用程序

android - 从 JNI/C++ 获取 Android 蓝牙适配器名称

java - 国际化java软件