Я пытался познакомиться с JNI и его функциональностью. Я пытаюсь понять, как я могу сохранить ссылку на среду Java. Сначала я вызываю нативный метод, который store создает «NewGlobalRef» из рабочего места, и он некоторое время работает нормально. Но потом вдруг я получаю фатальную ошибку и лог. Я почти уверен, что сборщик мусора удаляет что-то, даже если я постоянно держу ссылку на объект с обеих сторон.
Что я делаю в банкомате, это
я вызываю нативный метод
myCoolObject.nativeMethod(otherCoolObject);
Я все время держу ссылку на otherCoolObject на стороне Java. То, что делает нативный метод, это
JNIEXPORT void JNICALL Java_HelloWorld_nativeMethod(JNIEnv *env, jobject obj , jobject otherCoolObject) {
cout << "Called native method!" << endl;
coolObj = env->NewGlobalRef(otherCoolObject);
clazz = (*env).GetObjectClass(coolObj;
callbackEnv = env;
methodId = (*env).GetMethodID(clazz, "callback", "(II)V");
jint x = 1;
jint y = 2;
(*callbackEnv).CallVoidMethod(coolObj, methodId, x, y);
}
и я могу некоторое время вызывать метод после этого, но внезапно он дает мне фатальную ошибку, о которой я говорил вам