Array of Object Array (2d arrays) JNI
Solution 1
This jclass myClassArray = (*env)->FindClass(env, "[Lorg/apache/s4/core/ShareStruct");
is wrong.
To create the array do something like
ret = (*env)->NewObjectArray(env,sizeOfArray,myClass,NULL);
(*env)->SetObjectArrayElement( env, ret,index, sharedStructObj);
Here sharedStructObj will have to be created by newObject.
Section 3.3.5 of JNI programmer's guide has a good related example
This is also nice Create, populate and return 2D String array from native code (JNI/NDK)
EDIT based on comment
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);
Solution 2
You have to use an object array for the outer array:
jclass myClassArray = (*env)->FindClass(env, "[Ljava/lang/Object;");
in a similar case with a 2D String array worked for me. Please also recognize the trailing semicolon in the string.
Solution 3
I do not know if this question is still relevant, but I think you simply forgot the semicolon at the end of your array class specification:
jclass myClassArray = (*env)->FindClass(env, "[Lorg/apache/s4/core/ShareStruct;");
Related videos on Youtube
user1018513
Updated on June 04, 2022Comments
-
user1018513 almost 2 years
I'm struggling with creating a 2d array of my custom object type 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);
The first class loading works (the ShareStruct is fine), but the other one (trying to load a ShareStruct[] class) doesn't. I've tried both with and without the L but no luck. Any ideas? I'm new with JNI.
Thanks!
-
bobby over 11 yearshave updated my answer, did it help?
-
-
user1018513 over 11 yearsBut I want to create an array of ShareStruct[], so the java equivalent would be ShareStruct[][]. I don't see how this code does that :( Effectively, I want to do : ShareStruct[] in; ShareStruct[] out; ShareStruct[][] ret ; ret[0] = in ; ret[1] = out ;
-
CloudyTrees almost 8 yearsThis is a good answer, but "Section 3.3.5 of JNI programmer's guide has a good related example", link is dead as of 2016-05-18.
-
I L over 4 yearslink to JNI Programmer's guide (Section 3.3.5 has the example mentioned by @CloudyTrees): barbie.uta.edu/~jli/Resources/…