мне следует удалить DeleteGlobalRef, если задание возвращается из JNI в JAVA? - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу сохранить объект Java в JNI. Так что я делаю

jobject gRefObj = (*env)->NewGlobalRef(env, obj);

После этого я хочу получить задание из другого потока и из java-вызова jni для возврата объекта. Так и я.

(*_env)->DeleteGlobalRef(_env, gRefObj ); // if remove this line, it will work
return gRefObj; // From jni return to java

Тогда я получил classCastException, но если я удаляю DeleteGlobalRef, он работает нормально. Будет ли Java удалять его после использования?

1 Ответ

0 голосов
/ 15 сентября 2018

На основании комментариев @mkaes и @Michael я пытался сделать

JNIEXPORT jobject JNICALL Java_com_sample_getMyObject(JNIEnv *env, jobject obj) {
    jclass clz = (*env)->GetObjectClass(env, obj);
    // .. doing something
    jobject lRefObj = (*env)->NewLocalRef(env, gRefObj);

    (*env)->DeleteGlobalRef(env, gRefObj);  
    (*env)->DeleteLocalRef(env, clz);
    return lRefObj;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...