将2D bytearray传递给C Jni 我想通过JNI将一个2D字节数组从java传递到C++,一切都很好,但是我不能得到第三数组的值。
爪哇: C++:将2D bytearray传递给C Jni 我想通过JNI将一个2D字节数组从java传递到C++,一切都很好,但是我不能得到第三数组的值。,java,java-native-interface,Java,Java Native Interface,爪哇: C++: 我无法获取第三个数组的值。我是否正确使用GetPrimitiveArrayCritical?您违反了下列规则中给出的两个或三个规则: 如果成功,GetXXX后面必须跟一个ReleaseXXX GetXXXCritical可以嵌套,也就是说,应该以相反的顺序发布 而且,当处于关键区域时,最好不要调用I/O或其他长时间运行的函数 注:isCopy仅供参考。您最好传递NULL,而不是&isCopy,因为您无论如何都不会使用它。 byte[][] b = new byte[3]
我无法获取第三个数组的值。我是否正确使用GetPrimitiveArrayCritical?您违反了下列规则中给出的两个或三个规则:
注:
isCopy
仅供参考。您最好传递NULL
,而不是&isCopy
,因为您无论如何都不会使用它。
byte[][] b = new byte[3][];
byte[] b1= new byte[]{0x1,0x2,0x3,0x4};
byte[] b2= new byte[]{0x5,0x6,0x7,0x8};
byte[] b3= new byte[]{0x9,0x9,0x9,0x9};
b[0]=b1;
b[1]=b2;
b[2]=b3;
sendData(b);
JNIEXPORT jbyteArray JNICALL Java_jni_JniExample_sendData___3_3B
(JNIEnv *env, jobject obj, jobjectArray data)
{
jboolean isCopy;
uint8_t** y = new uint8_t*[3];
for(int i=0;i<3;i++)
{
jbyteArray bytearray = (jbyteArray)env->GetObjectArrayElement(data, i);
y[i] = (uint8_t *)env->GetPrimitiveArrayCritical(bytearray, &isCopy);
cout << i << " " << y[i] << endl;
}
}
0 0x1 0x2 0x3 0x4
1 0x5 0x6 0x7 0x8
2