2017-10-10 28 views
0
jclass class= env->FindClass("java/util/ArrayList"); 

listClass = (jclass)env->NewGlobalRef(class); 

listAddAllID = env->GetMethodID(listClass, "addAll", "(Ljava/lang/Object;)Z"); 

ArrayList中的addAll我得到了下面的例外爲上述代碼「java.lang.NoSuchMethodError:的addAll」 .I使用的「郎/對象」用於返回類型布爾參數和「Z」。這似乎是完全正確的。我在這裏錯過了什麼?的NoSuchMethodError用於JNI

public boolean addAll(Collection c)

+2

「集合」與「對象[]」非常不同。狂猜:'env-> GetMethodID(listClass,「addAll」,「(java/util/Collection;)Z」)' –

+0

它通過將對象更改爲集合。感謝陀螺。 –

回答

1

您可以隨時使用javap獲得方法

> javap -s java.util.ArrayList | grep -A +1 addAll 
    public boolean addAll(java.util.Collection<? extends E>); 
    descriptor: (Ljava/util/Collection;)Z 
-- 
    public boolean addAll(int, java.util.Collection<? extends E>); 
    descriptor: (ILjava/util/Collection;)Z 

所以,你需要將其更改爲其中之一(這取決於你想撥打電話)的正確描述。

與JNI玩得開心!

+0

我嘗試了所提到的命令並且有一個清晰的想法。謝謝你的一個例子。 –

+1

.oOo。大!與JNI玩得開心! .oOo。 – mko

0

It seems to be right completely.

難以理解。這是完全錯誤的。該API說該參數是一個Collection

不要猜測這些事情,也不要試圖自己編寫JNI方法sigmatures。使用javap -s的輸出。這絕不是錯的。

+0

直到你說出來才知道這點。真的很好寫JNI方法。謝謝。 –