繁体   English   中英

JNI:从 C++ 设置 jobjectArray

[英]JNI: set jobjectArray from c++

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

先感谢您! :)

安吉拉


我的Java代码:

public class MyClass {

    private MyObject[] array; 
 ....
}

我需要从 C++ 设置array

我假设您从 Java 作为object传递了JNIEnv *envMyClass对象,并且您的类不在包中。

首先,我们需要查找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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM