C和Java通过Jni

我正在尝试从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警告:exception调用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):待处理的exception是:03-25 18:17:32.323:INFO / dalvikvm(655):Ljava / lang / NoSuchMethodError;:玩

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

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

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

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

而不是

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

看起来你正试图找到一个方法,当方法实际上不带参数时,它接受一个String参数。