use*_*513 0 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);
Run Code Online (Sandbox Code Playgroud)
第一个类加载有效(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);
Run Code Online (Sandbox Code Playgroud)
在这里,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);
Run Code Online (Sandbox Code Playgroud)