2023-01-20 307
我正在尝试使用本机实现(将LUA挂接到活动中)覆盖活动回调方法.但是,我已经遇到了一个障碍,试图在JNI代码中调用SuperClass方法,这是回调的要求.
例如,我有这样的课:
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是特定于类的jmethodid,并且会识别超级方法,但是事实并非如此.
所以我的问题是,您如何实施此功能…
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
}
在jni?
中
您可以尝试callnonvirtualVoidMethod():请参见 http://docs.oracle.com/javase/6/docs/technotes/guides/jni/jni/spec/functions.html#wp4581
您可以做到这一点:
protected void onCreate(Bundle bundle)
{
super.onCreate(bundle);
onCreate0(bundle);
}
private native void onCreate0(Bundle bundle);
以上所述是小编给大家介绍的如何在Java中通过JNI调用超类的方法?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/26198.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态