2011-02-03 112 views
0

我在使用JNI共享Java和C之間的流時遇到了問題。我試圖從C調用Java方法,但是當我試圖獲得GetObjectMethodID時,出現nosuchmethodfound異常。從C到JNI調用Java方法時出現異常NOSUCHMETHODERROR

C代碼:

jclass cls = (*env)->GetObjectClass(env, obj); 
jmethodID aMethodID = (*env)->GetMethodID(env, cls, "callbackmethod", "(I)V"); 
if (aMethodID == 0) { 
    log("Unable to get methodID"); //Always getting aMethodID as 0 
} 
int myvar = 7; 
(*env)->CallVoidMethod(env, obj, aMethodID, myvar); 

Java代碼:

public class myclass extends activity { 
    private void callbackmethod(int i) { 
     Log.d("Tag", "In Java code"); 
    } 

    ------- 
    more code 
} 

現在,我總是得到一個錯誤Ljava/lang/NoSuchMethodError;: callbackmethod

一切看起來不錯,但我的代碼不起作用。問題是什麼?

+0

我是否需要包含任何頭文件?這只是我現在可以想到的事情 – 2011-02-03 18:07:48

+0

更新您的C,Java源代碼以反映實際的片段,然後解決方案會更快。你是否正確地生成了callabckmethod()的簽名? – TheCottonSilk 2011-02-03 18:11:34

回答

2

這是我的錯。我從java靜態函數調用本地函數。我刪除了靜態關鍵字。現在工作正常。

5

JNI方法是否是靜態的?如果是這樣,它的第二個參數是類,而不是當前對象的指針this

此外,是在當前類或在其基地的問題的方法?從所有小寫拼寫爲activity的事實來看,這不是實際代碼的複製/粘貼,而是重寫。在真實代碼中查找錯誤更容易。

相關問題