2012-11-26 46 views
0

我想從我的本機代碼調用Java方法,但它失敗。我不能用const字符串調用方法(即「string」作爲參數,也不按以下方式調用 如果我從方法中刪除char []參數,並且僅使用int參數從本地調用它,它就可以工作。問題是的char []參數通過JNI與char []參數調用方法

我的Java類統計:。

public class Stats { 

    HashMap<String, Integer> mStats; 

    public Stats() { 
     mStats = new HashMap<String, Integer>(); 
    } 

    public void put(char[] key, int value) { 
     mStats.put(new String(key), value); 
    } 

} 

和本地功能

void Java_com_..._testObject(JNIEnv* env, jobject javaThis, 
     jobject jStatsObj) { 
    jclass jstatistics_class = env->GetObjectClass(jStatsObj); 
    jmethodID jput_method = env->GetMethodID(jstatistics_class, "put", "(C[I)V"); 
    char s[]={"hello"}; 
    env->CallIntMethod(jStatsObj, jput_method, s, 3); 
} 
+0

你有例外嗎?任何可能的暗示,問題可能是什麼?代碼運行時你會遇到藍屏死機嗎?我確信這對任何有JNI經驗的人來說都是一個快速解決方案,您可能會收到答案,但您應該儘可能簡化問題,以便爲我們其他人解答。 –

+2

C char與Java char不同,另外C數組也與Java數組不同。您需要做大量轉換工作才能從C char數組創建Java char數組。 – Dunes

回答

1

你有方法簽名錯誤

(C[I)V表示void method(char, int[])

您需要([CI)V

來源:this page

+1

@Bush不要猜測JNI方法簽名字符串。使用javap -s的輸出。 – EJP