c jni java,通过Jni实现C和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 method:

public static void play () {

track.write (bytes, 0, bytes.length);

}

Cause this error:

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?

解决方案

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

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"

rather than

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值