从C到JNI调用Java方法时出现异常NOSUCHMETHODERROR

时间:2011-02-03 18:02:26

标签: java android java-native-interface android-ndk

我在使用JNI在Java和C之间共享流时遇到问题。我试图从C调用Java方法,但是当我尝试获取nosuchmethodfound时,我收到了GetObjectMethodID异常。

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

一切看起来都不错,但我的代码不起作用。有什么问题?

2 个答案:

答案 0 :(得分:5)

JNI方法是否是静态的?如果是这样,它的第二个参数是类,而不是当前对象的this指针。

此外,当前类或其基础中的方法是否有问题?从你拼写activity全部小写的事实来看,这不是你实际代码的复制/粘贴,而是重写。在实际代码中查找错误更容易。

答案 1 :(得分:2)

这是我的错。我从java静态函数调用本机函数。我删除了静态关键字。现在工作正常。