2

我正在使用 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);

为什么我不能在非活动类中调用函数?我的错误是什么?

我的常规课程

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();
 }
4

1 回答 1

0

您需要使用GetStaticMethodID()andCallStaticVoidMethod()用于静态方法。这与是否在活动中的方法无关。

于 2012-12-27T15:37:48.477 回答