我试图重写一个本机实现的活动回调方法(将Lua挂钩到活动中)。不过,我试图在JNI代码中调用超类方法,正如回调所要求的。如何通过JNI在Java中调用重载的超类方法?
例如,我有这样一个类:
class TestActivity extends Activity {
@Override
protected native void onCreate(Bundle bundle);
static {
System.loadLibrary("test-jni")
}
}
我试图用C实现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是特定于一个类,并将确定超级方法,但事实并非如此。
所以我的问题是,你怎么实现这个...
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
}
在JNI?
Arg,错过了参考。现在运行干净。谢谢! – jmbx3nu