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);

非アクティビティクラスで関数を呼び出せないのはなぜですか? 私の間違いは何ですか?

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

1 に答える 1

0

静的メソッドにはGetStaticMethodID()andを使用する必要があります。CallStaticVoidMethod()これは、メソッドがアクティビティにあるかどうかとは関係ありません。

于 2012-12-27T15:37:48.477 に答える