2011-07-08 17 views
4

我有一个由本机线程调用的Java回调方法。 回调的参数之一是一个ArrayList对象。创建ArrayList <String> JNI中的对象

我无法获得ArrayList及其方法的classref。 尝试使用“Ljava/util/ArrayList”但徒劳。 请提出解决方案。在此先感谢

回答

0

类的引用是:

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

OR

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

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

0

我不明白的权利,但我认为你需要像这样的事:

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); 
} 
相关问题