日期:2014-05-20  浏览次数:20727 次

求助!急!用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语句慢慢调试,应该没什么大问题的。