2013-01-07 71 views
1

我打電話從我的JNI類非靜態函數的時候,但我的比賽變得的NoSuchMethodError調用CallVoidMethod

的NoSuchMethodError

我已經給下面

JNI類

功能
void InitializeJni() 
{ 
    cocos2d::JniMethodInfo methodInfo; 
    if (! JniHelper::getStaticMethodInfo(methodInfo, CLASS_NAME, "Start", "()V")) 
    { 
     return ; 
    } 
    methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID); 
    methodInfo.env->DeleteLocalRef(methodInfo.classID); 
} 

JNIEXPORT void JNICALL Java_com_games_Game_MyClass_nativeObjectCallBack(JNIEnv *env, jobject obj) 
{ 
    jclass cls = env->GetObjectClass(obj); 
    jmethodID mid = env->GetMethodID(cls, "Init", "()V"); 
    if (mid == 0) 
     return; 
    env->CallVoidMethod(obj, mid); 

Java類

public static native void nativeObjectCallBack(); 

public void Init() 
{ 
    //my code 
} 

public static void Start() 
{ 
    ((CYWGameAndroid)CYWUtil.GetInstance().GetContext()).runOnUiThread(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      nativeObjectCallBack(); 
     } 
    }); 
} 

誰能告訴我這是爲什麼

這是我的logcat輸出

01-07 16:53:49.987: D/dalvikvm(11832): GetMethodID: method not found: Ljava/lang/Class;.Init:()V 
01-07 16:53:52.049: D/AndroidRuntime(11832): Shutting down VM 
01-07 16:53:52.049: W/dalvikvm(11832): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0) 
01-07 16:53:52.109: E/AndroidRuntime(11832): FATAL EXCEPTION: main 
01-07 16:53:52.109: E/AndroidRuntime(11832): java.lang.NoSuchMethodError: Init 
01-07 16:53:52.109: E/AndroidRuntime(11832): at com.games.Game.MyClass.nativeObjectCallBack(Native Method) 

回答

2

CallVoidMethod()應該有一個實例參數,而不是一個的classID參數來調用。

+0

請你舉一個例子 – glo

+0

@Glinda'methodInfo.classID'不是一個實例參數。好?事實上,我說錯了,它也不是一個類參數。你必須有一個類的實例來初始化。它在哪裏? – EJP

+0

我對此很陌生,不知道如何從jni獲得課程實例 – glo