2015-02-23 85 views
0

我正在使用C實現JNI實現,並嘗試使用java/util/Collectionssort方法對Comparator進行排序,並對java/lang/List類型的列表進行排序。要獲得描述符簽名,我主要使用javap通過JNI調用Collections.sort

在這種情況下,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

有人能給我一個提示這是什麼問題嗎?我錯過了什麼?

在此先感謝您的幫助!

+1

'java.util.List' ='爪哇/郎/ List';!) – 2015-02-23 09:13:35

+1

@ PeterLawrey:* Facepalm * ..是的,就是這樣。謝謝!! – 2015-02-23 09:20:21

回答

0

或許令人混淆,標準類比如List不是java.lang甚至java.collectionsjava.util

你需要Ljava/util/List