JNI中的addall ArrayList的NoSuchMethodError

时间:2017-10-10 10:09:25

标签: java arraylist java-native-interface

jclass class= env->FindClass("java/util/ArrayList"); 

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

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

我为上面的代码得到了以下异常" java.lang.NoSuchMethodError:addAll"。我用过&lang / object'对于参数和' z'对于返回类型boolean.It似乎完全正确。我在这里错过了什么?

  

public boolean addAll(Collection c)

2 个答案:

答案 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玩得开心!

答案 1 :(得分:0)

  

似乎是完全正确的。

不可理解。这是完全错误的。 API表示参数为Collection

不要猜测这些事情,也不要试图自己编写JNI方法的思路。使用javap -s的输出。这绝不是错的。