Kyb*_*011 0 c java methods java-native-interface
我正在尝试从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);
Run Code Online (Sandbox Code Playgroud)
java方法:
public static void play () {
track.write (bytes, 0, bytes.length);
}
Run Code Online (Sandbox Code Playgroud)
导致此错误:
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;:玩
找到类,但找不到方法有什么问题?怎么决定?
问题是方法签名字符串不正确.对于没有返回void的参数的方法,方法签名字符串是"()V".
另一点是,有效的类型或方法签名字符串将永远不会有空格.因此,采用String参数并返回void的方法将是
"([Ljava/lang/String;)V"
Run Code Online (Sandbox Code Playgroud)
而不是
"([Ljava / lang / String;) V"
Run Code Online (Sandbox Code Playgroud)