簡體   English   中英

通過Jni實現C和Java

[英]C and Java through 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:警告/ dalvikvm(655):JNI警告:調用JNI方法並引發異常03-25 18:17:32.313:警告/ dalvikvm(655):在Lorg / libsdl / app / SDLActivity中; 。 主要(ILjava / lang / String; [I(GetByteArrayElements)03-25 18:17:32.313:警告/ dalvikvm(655):待處理的異常是: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參數的方法,而該方法實際上沒有任何參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM