Создать ArrayList <String>Объект в JNI - PullRequest
5 голосов
/ 08 июля 2011

У меня есть метод обратного вызова в Java, который вызывается собственным потоком.Одним из параметров обратного вызова является объект ArrayList.

Я не могу получить classref для ArrayList и его методов.Пробовал с "Ljava / util / ArrayList", но тщетно.Пожалуйста, предложите решение.заранее спасибо

Ответы [ 2 ]

1 голос
/ 05 июня 2013

Я не правильно понял, но я думаю, вам нужно что-то подобное:

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);
}
1 голос
/ 06 августа 2012

Ссылка на класс будет:

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

OR

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

У вас есть дополнительный L перед java/util/ArrayList. В этом случае вам также необходимо добавить ;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...