通过Jni实现C和Java

通过Jni实现C和Java,java,c,methods,java-native-interface,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 voi

我正在尝试从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


查找类,但找不到方法有什么问题?如何确定?

看起来您试图找到一个接受字符串参数的方法,而该方法实际上不接受参数。

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

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

    "([Ljava/lang/String;)V"
而不是

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

这个问题与C++无关,请重新加上标签。