JNI - 创建并返回`byte [] []`对象

时间:2018-01-16 11:38:55

标签: java java-native-interface

我有一个使用JNI的C实现方法,应返回byte[][]类型的结果。

我的代码如下:

jobjectArray result = java_env->NewObjectArray(num_byte_arrays, jbyteArray, NULL);
for (int i = 0 ; i < num_byte_arrays ; i++) {
    java_env->SetObjectArrayElement(result, i, java_env->NewByteArray(3));
}

我收到以下编译错误:

error: expected primary-expression before ',' token
   jobjectArray result = java_env->NewObjectArray(num_patches, jbyteArray, NULL);
                                                                         ^

我想我NewObjectArray的第二个参数,即jbyteArray,对于创建byte[][]数组不正确。

任何想法我应该如何指定对象数组的类型是byte[]

1 个答案:

答案 0 :(得分:0)

以下列方式解决它(某种解决方法):

jobjectArray result = NULL;
for (int i = 0 ; i < num_byte_arrays ; i++) {
    jbyteArray byte_array = java_env->NewByteArray(3);
    if (i == 0) {
        result = java_env->NewObjectArray(num_byte_arrays, java_env->GetObjectClass(byte_array), NULL);
    }
    java_env->SetObjectArrayElement(result, i, byte_array);
}

我所做的是,只有当第一个byte[]对象已经准备好时才创建对象数组。在第一个GetObjectClass对象上运行JNI方法byte[],我可以为NewObjectArray指定所需的jobject参数。

不确定以其他方式可以为您提供代表jobject的{​​{1}}项。