У меня есть функция JNI в C, которая передается в класс Java FILE, который представляет список каталогов. Я хотел бы вызвать функцию list() и получить список строк (файлов в каталоге). Как лучше всего это сделать?
Прямо сейчас у меня есть
static void* my_function(JNIEnv *env, jobject obj, jobject dir){
jarray listRet;
jclass cls = (*env)->GetObjectClass(env, dir);
jmethodID method = (*env)->GetMethodID(env, cls, "list", "()[Ljava/lang/String");
listRet = (*env)->CallObjectMethod(env, cls, method);
jsize stringCount = (*env)->GetArrayLength(env, listRet);
}
Однако, добавляя операторы ведения журнала, кажется, что вызов GetObjectClass никогда не проходит. Итак, правильный ли этот призыв? Кроме того, корректен ли вызов GetMethodID? Тип возвращаемого значения list() — это (java) String[]. Есть ли еще что-то, что я делаю не так?
CallObjectMethod
принимаетjobject
в качестве второго параметра. Возможно, вы думаете оCallStaticObjectMethod
(которое здесь не применимо). 17.09.2015GetMethodID
вы должны передатьcls
, а неdir
. Вы убедились, чтоcls
не равно NULL? 17.09.2015