在JNI中创建ArrayList <string>对象</string>

时间:2011-07-08 09:35:28

标签: java-native-interface

我在Java中有一个由本机线程调用的回调方法。 回调参数之一是ArrayList对象。

我无法获得ArrayList及其方法的classref。 试过“Ljava / util / ArrayList”但是徒劳无功。 请提出解决方案。提前谢谢

2 个答案:

答案 0 :(得分:1)

类引用将是:

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

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

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

答案 1 :(得分: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);
}