求助!急!用JNI调用VC获取的磁盘信息!
各位大哥,小弟在这求助了!帮我看看我的代码哪里需要补充的,谢谢了!!
disk.java代码如下:
public class disk
{
String str;
public native long diskFree();
public native long diskTotal();
static
{
System.loadLibrary( "disk ");
}
}
disk.cpp代码如下:
#include "disk.h "
#include <string.h>
#include <stdlib.h>
#include <windows.h>
JNIEXPORT jlong JNICALL Java_disk_diskFree
(JNIEnv *env, jobject obj)
{
jclass cls;
jfieldID fid;
jstring jstr;
const char *str;
cls=env-> GetObjectClass(obj);
fid=env-> GetFieldID(cls, "str ", "Ljava/lang/String; ");
jstr=(jstring)env-> GetObjectField(obj,fid);
str=env-> GetStringUTFChars(jstr,NULL);
ULARGE_INTEGER FreeAv,TotalBytes,FreeBytes;
if(GetDiskFreeSpaceEx(str,&FreeAv,&TotalBytes,&FreeBytes));
env-> ReleaseStringUTFChars(jstr,str);
return (jlong)FreeBytes.QuadPart;
}
JNIEXPORT jlong JNICALL Java_disk_diskTotal
(JNIEnv *env, jobject obj)
{
jclass cls;
jfieldID fid;
jstring jstr;
const char *str;
cls=env-> GetObjectClass(obj);
fid=env-> GetFieldID(cls, "str ", "Ljava/lang/String; ");
jstr=(jstring)env-> GetObjectField(obj,fid);
str=env-> GetStringUTFChars(jstr,NULL);
ULARGE_INTEGER FreeAv,TotalBytes,FreeBytes;
if(GetDiskFreeSpaceEx(str,&FreeAv,&TotalBytes,&FreeBytes));
env-> ReleaseStringUTFChars(jstr,str);
return (jlong)TotalBytes.QuadPart;
}
按找步骤运行可是不出结果...请问哪里还需要补充的吗?敬请大侠们指点!
------解决方案--------------------剩余空间和总空间大小……好像不用jni吧……
File.listRoots()能列出根目录……
File貌似也有getTotalSpace()和getFreeSpace()方法……
PS:如果你非要JNI实现的话……那……那我不会……你接着等吧……
------解决方案--------------------不知道LZ的具体情况,说没有结果也就是说生成的dll文件已经被正确的调用了。你的java程序没帖全吧?不实例化class disk 并调用它的方法当然没有结果。没“disk.h”所以没办法调试。建议在C代码里加printf语句慢慢调试,应该没什么大问题的。