我在Java中有一个由本机线程调用的回调方法。 回调参数之一是ArrayList对象。
我无法获得ArrayList及其方法的classref。 试过“Ljava / util / ArrayList”但是徒劳无功。 请提出解决方案。提前谢谢
答案 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);
}