1

我们正在尝试使用 Java Applet 获取客户端 MAC ID。小程序通过 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 加载到客户端计算机上时,我遇到了这个问题。

4

1 回答 1

0

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

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

于 2013-06-19T07:37:37.280 回答