使用Applet获取客户端MAC ID时出现问题

时间:2013-06-18 13:34:51

标签: java applet network-programming

我们正在尝试使用Java Applet获取客户端MAC ID。 applet通过HTML页面加载。 相同的代码如下:

public class mainRun extends Applet{
private static final long serialVersionUID = -4939998186435587428L;
String macAddr="";
public void paint(Graphics g)
{
    try
    {
        System.out.println("Start");
        InetAddress ip = InetAddress.getLocalHost();
        System.out.println((new StringBuilder("Current IP address : "+ip.toString())));
        NetworkInterface network = NetworkInterface.getByInetAddress(ip);
        byte mac[] = network.getHardwareAddress();
        System.out.println("mac : "+mac.toString());
        System.out.print("Current MAC address : ");
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < mac.length; i++)
            sb.append(String.format("%02X%s", new Object[] {
                    Byte.valueOf(mac[i]), i >= mac.length - 1 ? "" : "-"
            }));

        System.out.println(sb.toString());
        macAddr=String.valueOf(sb);

    }
    catch(SocketException e)
    {
        macAddr=e.toString();
        e.printStackTrace();
    }
    catch (Exception e) {
        macAddr=e.toString();
        e.printStackTrace();
    }
    g.drawString("HELLO: "+macAddr, 100, 100);
}
}

然而,在使用getHardwareAddress()方法时,我们得到空指针异常。

什么可能导致这个问题?

当我在本地机器上运行与Java Applet相同的类时,我得到了所需的输出。当Applet jar放在服务器上并且applet加载到客户端机器上时,我遇到了这个问题。

1 个答案:

答案 0 :(得分:0)

getHardwareAddress需要NetPermission(“getNetworkInformation”)。 http://docs.oracle.com/javase/7/docs/api/java/net/NetworkInterface.html#getHardwareAddress()

因此需要对applet jar进行签名。