今天在学习Hibernate的时候,查看Hibernate的文档中关于UUID的描述时,有这么一句话: 
“UUID包含:IP地址,JVM的启动时间(精确到1/4秒),系统时间和一个计数器值(在JVM中唯一)。 在Java代码中不可能获得MAC地址或者内存地址,所以这已经是我们在不使用JNI的前提下的能做的最好实现了。” 1.为什么Java不能获得MAC地址或者内存地址?经常看到网上一些关于java获取MAC地址的文章,他们好像用的是Runtime类 
2.另外,在开发中哪些地方能用到JNI?? 谢高手指点~~~

解决方案 »

  1.   

    java获取mac例子:package test;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;public class GetMACAddress { public static String getMACAddress() { String address = "";
    String os = System.getProperty("os.name");
    if (os != null && os.startsWith("Windows")) {
    try {
    String command = "cmd.exe /c ipconfig/all";
    Process p = Runtime.getRuntime().exec(command);
    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line;
    while ((line = br.readLine()) != null) {
    if (line.indexOf("Physical Address") > 0) {
    int index = line.indexOf(":");
    index += 2;
    address = line.substring(index);
    break;
    }
    }
    br.close();
    return address.trim();
    } catch (IOException e) {
    }
    }
    return address;
    } public static void main(String[] args) {
    System.out.println(getMACAddress());
    }
    }希望对你有帮助。
      

  2.   


    呵呵!這個方法知道!但是这样读出来的MAC等信息并不是Java代码直接获取的,而是调用了系统的命令,Java代码应该是不能直接访问机器硬件设备的吧!
      

  3.   

    1、获取mac地址不使用jni的方法就是调用系统命令ipconfig,然后解析获取到的数据,也就是调用runtime类来实现。 
    2、需要调用c++或其它语言编写的dll时需要用到jni(一般使用JNI时都是用JNI获取客户端机器的一些标识用来做校验【是否合法用户或其它】的),但是用了JNI后平台上的移植性不方便【例如在windows下编写的dll文件在Linux上就用不了等等】。 
    3、NetworkInterface类可以访问到本机所有网卡的信息,自己查查API文档吧。
    4、IE6上可以用JS去获取客户端机器的信息  LZ可以到google上搜“js获取MAC” 就会有很多相关介绍信息。
      

  4.   

    这个东西我查看了一下源代码,似乎也是跟JNI有关,其中的方法也是被声明为Native的