我想使用JNI将一个2D字节数组从Java传递到C ++,一切似乎都很好,但我无法获得第三个数组的值。
爪哇:
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);
C ++:
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
我无法达到第三个数组的值。我正确使用GetPrimitiveArrayCritical吗?
答案 0 :(得分:0)
您违反了documentation中提供的两个或三个规则: