通过Jni实现C和Java [英] C and Java through Jni

查看:119
本文介绍了通过Jni实现C和Java的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从S调用Java代码.此方法调用:

I'm trying to call the java code from S. This method call:


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:警告/dalvikvm(655):JNI警告:调用JNI方法并引发异常 03月25日18:17:32.313:警告/dalvikvm(655):在Lorg/libsdl/app/SDLActivity;中. main(ILjava/lang/String; [I(GetByteArrayElements) 03月25日18:17:32.313:警告/dalvikvm(655):待处理的例外是: 03-25 18:17:32.323:信息/dalvikvm(655):Ljava/lang/NoSuchMethodError ;:播放

03-25 18:17:32.313: WARN / dalvikvm (655): JNI WARNING: JNI method called with exception raised 03-25 18:17:32.313: WARN / dalvikvm (655): in Lorg / libsdl / app / SDLActivity;. main (ILjava / lang / String; [I (GetByteArrayElements) 03-25 18:17:32.313: WARN / dalvikvm (655): Pending exception is: 03-25 18:17:32.323: INFO / dalvikvm (655): Ljava / lang / NoSuchMethodError;: play

找到该类,但找不到方法什么问题?如何决定?

finds the class, but can not find a method What's the problem? How to decide?

推荐答案

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

The problem is that the method signature string is incorrect. For a method with no arguments returning void, the method signature string is "()V".

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

Another point is that a valid type or method signature string will never have spaces in it. Thus a method that takes a String argument and returns void would be

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

而不是

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

这篇关于通过Jni实现C和Java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆