簡體   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