JNI中如何创建ArrayList<String>对象

5

我在Java中有一个回调方法,由本地线程调用。其中一个回调参数是ArrayList对象。

我无法获取ArrayList及其方法的classref。 尝试使用"Ljava/util/ArrayList"但失败了。 请建议一个解决方案。提前致谢。

2个回答

1

类的引用将是:

jclass cls = (*env)->FindClass(env, "java/util/ArrayList");

或者

jclass cls = (*env)->FindClass(env, "Ljava/util/ArrayList;");

java/util/ArrayList 前面多了一个额外的 L。在这种情况下,您还需要添加一个 ;


1

我没理解清楚,但我认为你需要类似的东西:

void methodToCallJava(std::vector<YourClassCpp*> itens) {
    JNIEnv* env;
    YourSavedJVM->AttachCurrentThread(&env, NULL);
    jclass clazzDelegate = env->FindClass("your/delegate/class");
    jclass clazzYourClassJava = env->FindClass("your/class/java");
    jmethodID methodIdDelegate = env->GetMethodID(clazzDelegate, "delegateMethod", "(Ljava/util/ArrayList;)V");
    jobjectArray arrayListFromCpp = nullptr;
    jsize arrayListFromCppLength = itens.size();
    if (arrayListFromCppLength > 0)
        arrayListFromCpp = env->NewObjectArray(arrayListFromCppLength, clazzYourClassJava, methodToCreateJavaObjectFromCppObject(env, itens.at(0)));
    for (jsize c = 1; c < arrayListFromCppLength; c = c + 1)
        env->SetObjectArrayElement(arrayListFromCpp, c, methodToCreateJavaObjectFromCppObject(env, itens.at(c)));
    env->CallVoidMethod(this->delegate, methodIdDelegate, arrayListFromCpp);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接