通过JNI调用Collections.sort

时间:2015-02-23 09:07:03

标签: java c linux java-native-interface

我正在使用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

有人能给我一个暗示这个问题吗?我缺少什么?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

您需要Ljava/util/List