我正在尝试从S调用java代码。此方法调用:
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
找到类,但找不到方法有什么问题?怎么决定?
答案 0 :(得分:6)
问题是方法签名字符串不正确。对于没有返回void的参数的方法,方法签名字符串为"()V"
。
另一点是有效的类型或方法签名字符串永远不会有空格。因此,采用String参数并返回void的方法将是
"([Ljava/lang/String;)V"
而不是
"([Ljava / lang / String;) V"
答案 1 :(得分:2)
看起来你正试图找到一个方法,当方法实际上不带参数时,它接受一个String参数。