Исключение NOSUCHMETHODERROR при вызове метода Java из C через JNI - PullRequest
0 голосов
/ 03 февраля 2011

У меня проблема с совместным использованием потока между Java и C с JNI.Я пытаюсь вызвать метод Java из C, но я получаю исключение 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 ]

5 голосов
/ 03 февраля 2011

Является ли метод JNI статическим случайно?Если это так, его вторым параметром является класс, а не указатель this текущего объекта.

Кроме того, этот метод находится в текущем классе или в его базе?Судя по тому, что вы написали activity в нижнем регистре, это не копия / вставка вашего фактического кода, а перезапись.В реальном коде проще найти ошибки.

3 голосов
/ 04 февраля 2011

Это была моя ошибка.Я вызывал нативную функцию из статической функции Java.Я удалил статическое ключевое слово.Теперь работает нормально.

...