我在Java中有一个回调方法,由本地线程调用。其中一个回调参数是ArrayList对象。
我无法获取ArrayList及其方法的classref。 尝试使用"Ljava/util/ArrayList"但失败了。 请建议一个解决方案。提前致谢。
我在Java中有一个回调方法,由本地线程调用。其中一个回调参数是ArrayList对象。
我无法获取ArrayList及其方法的classref。 尝试使用"Ljava/util/ArrayList"但失败了。 请建议一个解决方案。提前致谢。
类的引用将是:
jclass cls = (*env)->FindClass(env, "java/util/ArrayList");
或者
jclass cls = (*env)->FindClass(env, "Ljava/util/ArrayList;");
在 java/util/ArrayList
前面多了一个额外的 L
。在这种情况下,您还需要添加一个 ;
。
我没理解清楚,但我认为你需要类似的东西:
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);
}