java - JNI : set jobjectArray from c++

标签 java c++ java-native-interface

我是第一次使用 JNI。 我有这个问题:在我的java代码中,有一个对象具有另一个对象(由我定义)的数组作为字段。现在,我需要从 native 代码设置此对象数组字段。我该怎么办?

提前谢谢您! :)

安吉拉

<小时/>

我的java代码:

public class MyClass {

    private MyObject[] array; 
 ....
}

我需要从 C++ 设置array

最佳答案

我假设您从 Java 作为 object 传递了一个 JNIEnv *env 和一个 MyClass 对象,并且您的类不在包中.

首先我们需要查找 MyObject 对象的一些类和构造函数:

jclass cls_MyClass = env->FindClass("MyClass");
jfieldID fld_MyClass_array = env->GetFieldID(cls_MyClass, "array", "[LMyObject;");

jclass cls_MyObject = env->FindClass("MyObject");
jmethodID ctr_MyObject = env->GetMethodID(cls_MyObject, "<init>", "(I)V");

现在我们构造一个大小为 10 的数组并用实例填充它:

jobjectArray arr = env->NewObjectArray(10, cls_MyObject, nullptr);
for (int i = 0; i < 10; i++) {
  jobject elem = env->NewObject(cls_MyObject, ctr_MyObject, i);
  env->SetObjectArrayElement(arr, i, elem);
  env->DeleteLocalRef(elem); // Keep amount of local references constant
}

最后我们将它分配给array字段:

env->SetObjectField(obj, fld_MyClass_array, arr);

关于java - JNI : set jobjectArray from c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60837236/

相关文章:

c++ - JNI 从 c 调用 java 得到段错误(核心转储)

java - 分布式序列号生成?

c++ - 从 node.js 调用 C 代码

c++ - 如何确定涉及C++中除法的算术表达式的数据类型

c++ - Main 函数与状态之间的通信

java - JNI : Class not found or FindClass returns NULL

java - 测试与 WebLogic Server 的连接

java - 无法运行从 javafx-basic-archetype 生成的包

带有 Swing 瘦客户端的 Java Server 应用程序架构

java - 如何在 MinGw shell 中使用 %JAVA_HOME% 环境变量