C и Java через Jni - PullRequest
       27

C и Java через Jni

0 голосов
/ 26 марта 2011

Я пытаюсь вызвать код Java из S. Вызов этого метода:


cls = (* env) -> FindClass (env, "org / libsdl / app / SDLActivity");
mid = (* env) -> GetStaticMethodID (env, cls, "play",
"([Ljava / lang / String;) V");
(* env) -> CallVoidMethod (env, cls, mid);

Java-метод:


public static void play () {
track.write (bytes, 0, bytes.length);
}

Причина этой ошибки:

03-25 18: 17: 32.313: WARN / dalvikvm (655): ПРЕДУПРЕЖДЕНИЕ JNI: вызван метод JNI с исключением 03-25 18: 17: 32.313: WARN / dalvikvm (655): в Lorg / libsdl / app / SDLActivity ;. main (ILjava / lang / String; [I (GetByteArrayElements) 03-25 18: 17: 32.313: WARN / dalvikvm (655): Ожидающее исключение: 03-25 18: 17: 32.323: INFO / dalvikvm (655): Ljava / lang / NoSuchMethodError ;: play

находит класс, но не может найти метод В чем проблема? Как решить?

Ответы [ 2 ]

6 голосов
/ 26 марта 2011

Проблема в том, что строка сигнатуры метода неверна.Для метода без аргументов, возвращающих void, строка подписи метода имеет вид "()V".

Другой момент заключается в том, что в допустимой строке типа или сигнатуры метода никогда не будет пробелов.Таким образом, метод, который принимает аргумент String и возвращает void, будет

    "([Ljava/lang/String;)V"

вместо

    "([Ljava / lang / String;) V"
2 голосов
/ 26 марта 2011

Похоже, вы пытаетесь найти метод, который принимает параметр String, когда метод фактически не имеет параметра.

...