C和Java通过Jni

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;:玩

找到类,但找不到方法有什么问题?怎么决定?

Ste*_*n C 6

问题是方法签名字符串不正确.对于没有返回void的参数的方法,方法签名字符串是"()V".

另一点是,有效的类型或方法签名字符串将永远不会有空格.因此,采用String参数并返回void的方法将是

    "([Ljava/lang/String;)V"
Run Code Online (Sandbox Code Playgroud)

而不是

    "([Ljava / lang / String;) V"
Run Code Online (Sandbox Code Playgroud)