2011-02-03 232 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的事实来看,这不是实际代码的复制/粘贴,而是重写。在真实代码中查找错误更容易。