小编sit*_*vic的帖子

无法从 JNI 设置 Java int 数组字段

我正在开发一个 Android 应用程序,并且正在从 C++ 库接收相机数据。我需要将这些数据从 C++ 发送到 Java 代码。为此,我使用 JNI。我可以在 Java 中从 JNI 和 C++ 数据中设置不同的字段(例如相机的名称或类型),但我无法设置 ID 字段,因为它是一个数组uint8_t

我怎样才能做到这一点?

我已经尝试了多种方法来执行此操作,但每次我都得到一个SIGSEGV error无效地址。对于我正在使用的其他领域

env->Set<Primitives>Field(jobject, jfieldID, value)
Run Code Online (Sandbox Code Playgroud)

方法,但没有类似int数组的方法,是吗?因此,我尝试通过调用类中的方法并提供数组int作为参数来设置此字段,但此函数失败并返回SIGSEGV error.

然后,我在网上搜索并尝试通过设置该字段

env->GetObjectField(jobject, jfieldID)
Run Code Online (Sandbox Code Playgroud)

env->SetIntArrayRegion(jintArray, start, end, myIntArray)
Run Code Online (Sandbox Code Playgroud)

但这里第一个方法总是返回 null。

JavaVM * mJVM; //My Java Virtual Machine
jobject mCameraObject, mThreadObject; //Previously initialize to call functions in the right thread

void onReceiveCameraList(void *ptr, uint32_t /*id*/, my::lib::Camera *arrayCamera, uint32_t nbCameras) {

    JNIEnv *env;
    mJVM->AttachCurrentThread(&env, nullptr);
    if …
Run Code Online (Sandbox Code Playgroud)

c++ java java-native-interface

5
推荐指数
1
解决办法
2071
查看次数

标签 统计

c++ ×1

java ×1

java-native-interface ×1