我目前正在创建一些Java绑定,用于我正在工作的C库。我们的一个C结构有一个char缓冲区,是一个文件系统路径。调用C函数后,缓冲区会被正确填充。我想将缓冲区转换为Java对象上的
然而,我遇到了一些问题。由于某种原因,在C内部生成了
创建
以下是相关的C代码:
我能想到的只有我可能没有正确调用Java的可变参数函数。我还尝试在方法调用时传递
java.nio.file.Path
成员。然而,我遇到了一些问题。由于某种原因,在C内部生成了
NullPointerException
,我无法看到问题所在。创建
java.nio.file.Path
对象的方法是通过java.nio.file.Paths::get()
进行的。以下是相关的C代码:
const jclass paths_class = (*env)->FindClass(env, "java/nio/file/Paths");
if ((*env)->ExceptionCheck(env))
return;
const jmethodID get_method = (*env)->GetStaticMethodID(
env, paths_class, "get", "(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;");
if ((*env)->ExceptionCheck(env))
return;
const jstring path_str = (*env)->NewStringUTF(env, info.mi_path);
if ((*env)->ExceptionCheck(env))
return;
const jobject path_obj =
(*env)->CallStaticObjectMethod(env, paths_class, get_method, path_str); // exception generated here
if ((*env)->ExceptionCheck(env))
return;
同时附上 Java 类:
public final class MclassInfo {
private native void _get(final Kvdb kvdb, Mclass mclass) throws HseException;
private long allocatedBytes;
private long usedBytes;
private Path path;
MclassInfo(final Kvdb kvdb, final Mclass mclass) throws HseException {
_get(kvdb, mclass);
}
public long getAllocatedBytes() {
return allocatedBytes;
}
public long getUsedBytes() {
return usedBytes;
}
public Path getPath() {
return path;
}
}
我能想到的只有我可能没有正确调用Java的可变参数函数。我还尝试在方法调用时传递
NULL
作为额外参数,但仍然出现了相同的问题。