2011-10-29 54 views
20

我試圖執行Java中(從C)的函數具有以下特徵:JNI:在函數簽名傳遞多個參數的GetMethodID

public void execute(int x, int y, int action); 

我的問題是要界定的GetMethodID函數簽名:

env->GetMethodID(hostClass, "execute", "(I;I;I;)V"); 

我是個越來越的問題是:

W/dalvikvm(1849): Bogus method descriptor: (I;I;I;)V 
W/dalvikvm(1849): Bogus method descriptor: (I;I;I;)V 
D/dalvikvm(1849): GetMethodID: method not found: Lcom/device/client/HostConnection;.execute:(I;I;I;)V 

我不知道豪w在GetMethodID中指定方法簽名(3個整數作爲參數)。我看到有人用「;」在String和File類的其他帖子中分開參數,但是沒有像integer這樣的基元。

請問這樣做的正確方法是什麼?

謝謝。

回答

48

根據此file您應該使用(III)V簽名。只有當您需要指定 完全合格的課程時,您應該使用';',如Ljava/lang/String;

+0

非常感謝!你幫我解決了我的問題,謝謝! – Jary

+0

這是解決各種JNI問題的非常有用的鏈接,謝謝! –

+0

如果是public void execute(String x,int y); ? (Ljava/lang/String; I)V?錯誤.... – zszen