我们正在尝试使用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加载到客户端机器上时,我遇到了这个问题。
答案 0 :(得分:0)
getHardwareAddress
需要NetPermission(“getNetworkInformation”)。
http://docs.oracle.com/javase/7/docs/api/java/net/NetworkInterface.html#getHardwareAddress()
因此需要对applet jar进行签名。