通过 JNI 调用 Collections.sort

Calling Collections.sort via JNI

我正在使用 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 是错误的(或 NULL)。我与 GetStaticMethodID 一起使用的签名是一个粗略的猜测。我不得不承认我对 Java 并不深入,但它足以与 JNI 一起使用。

我在这个项目中使用 jdk1.8.0_31

任何人都可以给我提示这是什么问题吗?我缺少什么?

在此先感谢您的帮助!

也许令人困惑,标准 类 像 List 不在 java.lang 甚至 java.collections 中,但在 java.util

你需要Ljava/util/List