我正在使用jni,我可以在c ++类的常规活动中调用java函数,但是当我尝试在非活动类中调用java函数时,我的代码不起作用。
我的意思是
jclass activityclass = env->FindClass("com/example/test/MyActivity);
jmethodID methodID = env->GetMethodID(activityclass,"FunctionName","()V");
env ->CallVoidMethod(obj,methodID);
这很有效。 当我尝试从非活动的常规java类调用相同的函数(具有相同的名称)时,它不起作用。
jclass regularclass = env->FindClass("com/example/test/MyRegularClass);
jmethodID methodID = env->GetMethodID(regularclass ,"FunctionName","()V");
env ->CallVoidMethod(obj,methodID);
为什么我不能在非活动类中调用函数?我的错是什么?
我的MyRegularClass
public class MyRegularClass{
public static void FunctionName(){
Log.i("Java Worked","Java Worked");
}
}
我的活动课程
public class MyActivity{
system.load.library("mylib");
@Override
public void onCreate(Bundle savedInstanceState){
....
....
testJNI();
}
public static void FunctionName(){
Log.i("Activity Worked","Activity Worked");
}
public native void testJNI();
}
答案 0 :(得分:0)
您需要将GetStaticMethodID()
和CallStaticVoidMethod()
用于静态方法。这与活动中的方法无关。