有两个A,B级
m_Class,m_MethodID不为NULL。
但是在调用env-> CallVoidMethod后,系统会崩溃,为什么?
public Class A extends Activity {
protected void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
B BClass = new B();
BClass.setFunction(this, "testFunc");
}
public void testFunc() {
Log.e("", "Test");
}
}
public Class B {
public native void setFunction(Object caller, String method);
}
------------- ------------- JNI
JNIEXPORT void JNICALL Java_com_B_setFunction(JNIEnv *env, jobject thiz, jobject clsCaller, jstring sMethod) {
string sMethodName = jstring2str(env, sMethod);
jclass m_Class = env->GetObjectClass(clsCaller);
jmethodID m_MethodID = env->GetMethodID(m_Class, sMethodName.c_str(), "()V");
env->CallVoidMethod(m_Class, m_MethodID);
}
答案 0 :(得分:2)
我已经解决了这个问题.. 我参考了这个页面Android NDK: calling java method from JNI C class 并修改JNI中的代码
这
env->CallVoidMethod(m_Class, m_MethodID);
到
env->CallVoidMethod(clsCaller, m_MethodID);
因为CallVoidMethod是按实例触发的(clsCaller)而不是类(m_Class)