gpt4 book ai didi

java - 如何通过 JNI 在 Java 中调用重写的父类(super class)方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:51:16 25 4
gpt4 key购买 nike

我正在尝试使用 native 实现覆盖 Activity 回调方法(将 Lua 挂接到 Activity 中)。然而,我在尝试调用 JNI 代码中的父类(super class)方法时遇到了障碍,这是回调所必需的。

例如,我有这样一个类:

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 错误(应用错误):本地引用表溢出(最大值 = 512)

我认为 jmethodID 是特定于类的,并且会标识 super 方法,但事实并非如此。

所以我的问题是,你如何实现这个......

@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
}

在 JNI 中?

最佳答案

关于java - 如何通过 JNI 在 Java 中调用重写的父类(super class)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16928459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com