java jni 类方法 调用_如何通过JNI在Java中调用重写的超类方法?

我正在尝试使用本机实现重写活动回调方法(以将Lua挂接到活动中)。但是我遇到了一个麻烦,试图在JNI代码中调用超类方法,这是回调所必需的。

例如,我有一个像这样的课程:

class TestActivity extends Activity {

@Override

protected native void onCreate(Bundle bundle);

static {

System.loadLibrary("test-jni")

}

}

我正在尝试TestActivity.onCreate()在C中这样实现:

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中?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值