通过JNI调用Collections.ort



我正在使用C进行JNI实现,并尝试使用java/util/Collections sort方法和Comparator对类型为java/lang/List的列表进行排序。为了获得描述符签名,我主要使用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

有人能告诉我这里有什么问题吗?我缺少什么?

提前感谢您的帮助!

也许令人困惑的是,像List这样的标准类不在java.lang甚至java.collections中,而是在java.util

您需要Ljava/util/List

最新更新