各位大哥,小弟在这求助了!帮我看看我的代码哪里需要补充的,谢谢了!!
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;

}按找步骤运行可是不出结果...请问哪里还需要补充的吗?敬请大侠们指点!

解决方案 »

  1.   

    剩余空间和总空间大小……好像不用jni吧……
    File.listRoots()能列出根目录……
    File貌似也有getTotalSpace()和getFreeSpace()方法……PS:如果你非要JNI实现的话……那……那我不会……你接着等吧……
      

  2.   

    ......我这程序必须要用JNI,因为我要在JAVA中得到磁盘的信息,并且用JSP显示出来有懂JNI的大哥吗?帮帮忙!小弟在这先谢过了!!
      

  3.   

    磁盘的信息是啥意思???整个硬盘的?还是某个分区的??
    我看你好像就想获得总容量和剩余容量……如果是想得到某个分区的容量不需要jni就可以得到(看我上面说的那些方法)……如果是整个块磁盘的容量……请你忽略这一楼……
      

  4.   

    是整个的磁盘...
    还有一点需要说明的是,这个程序的要求就是要用JNI方法,不是我要用,是要求用...
      

  5.   

    不知道LZ的具体情况,说没有结果也就是说生成的dll文件已经被正确的调用了。你的java程序没帖全吧?不实例化class disk 并调用它的方法当然没有结果。没“disk.h”所以没办法调试。建议在C代码里加printf语句慢慢调试,应该没什么大问题的。