我正在使用C进行JNI实现,并尝试使用java/lang/List
java/util/Collections
方法和sort
对类型Comparator
的列表进行排序。为了获得描述符签名,我主要使用javap
。
在这种情况下,javap不会显示排序方法的任何描述符。我得到的只是
$ javap -s -p java.util.Collections | grep -i sort
public static <T extends java.lang.Comparable<? super T>> void sort(java.util.List<T>);
public static <T> void sort(java.util.List<T>, java.util.Comparator<? super T>);
...
在JNI代码中,我使用
// Get Collections class
jclass collections_clazz = (*(px->env))->FindClass(px->env, "java/util/Collections");
if (!collections_clazz) ...
// Get sort method
jmethodID sort_mid = (*(px->env))->GetStaticMethodID(px->env, collections_clazz,
"sort", "(Ljava/lang/List;Ljava/util/Comparator;)V");
if (!sort_mid) ...
在我的情况下,sort_mid
为false(或NULL)。我使用GetStaticMethodID的签名是一个粗略的猜测。我不得不承认我并不深入Java,但它足以与JNI一起使用。
我在这个项目中使用jdk1.8.0_31
。
有人能给我一个暗示这个问题吗?我缺少什么?
提前感谢您的帮助!
答案 0 :(得分:0)
也许令人困惑的是,像List
这样的标准类不在java.lang
甚至java.collections
但java.util
您需要Ljava/util/List