我是第一次使用 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/