C和Java通过Jni

时间:2011-03-26 13:15:11

标签: java c 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);

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 个答案:

答案 0 :(得分:6)

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

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

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

而不是

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

答案 1 :(得分:2)

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