Как вызвать переопределенный метод суперкласса в Java через JNI?
m пытается переопределить метод обратного вызова действия с нативной реализацией (чтобы подключить Lua к действию). Однако я'Мы столкнулись с проблемой, пытаясь вызвать метод суперкласса в коде JNI, как это требуется для обратного вызова.
Например, у меня есть такой класс:
class TestActivity extends Activity {
@Override
protected native void onCreate(Bundle bundle);
static {
System.loadLibrary("test-jni")
}
}
И я'я пытаюсь реализоватьTestActivity.onCreate()
в С это так:
void Java_test_TestActivity_onCreate(JNIEnv* env, jobject obj, jobject bundle)
{
// Get class, super class, and super class method ID...
jclass objcls = (*env)->GetObjectClass(env, obj);
jclass sprcls = (*env)->GetSuperclass(env, objcls);
jmethodID methid = (*env)->GetMethodID(env, sprcls, "onCreate", "(Landroid/os/Bundle;)V");
// Call super class method...
(*env)->CallVoidMethod(env, obj, methid, bundle);
}
Тем не менее, когда я пытаюсь этот код,TestActivity.onCreate()
называется внутри себя, а неActivity.onCreate()
, Производя эту ошибку:
JNI ERROR (app bug): local reference table overflow (max=512)
Я думал, что jmethodID специфичен для класса и идентифицирует метод super, однако это нет дело.
Итак, мой вопрос, как вы реализуете это ...
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
}
В JNI?