我在C中有一个JNI函数,它在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 []。 还有其他地方我出错吗?
答案 0 :(得分:1)
list
不是File
的静态方法。也就是说,它属于File
(在您的情况下为dir
)的实例,而不属于File
类。
所以而不是:
listRet = (*env)->CallObjectMethod(env, cls, method);
你应该使用:
listRet = (*env)->CallObjectMethod(env, dir, method);
此外,您似乎在list
的签名中缺少分号。它应该是"()[Ljava/lang/String;"