Это не обязательно проблема с разрешениями апплета. Это в первую очередь старая добрая ошибка в вашем коде: -).
Считайте документы для NetworkInterface.getHardwareAddress()
- метод может вернуть null
:
возвращает: байтовый массив, содержащий адрес, или ноль, если адрес
не существует, недоступен или установлен менеджер безопасности и
абонент не имеет разрешения
NetPermission ( "getNetworkInformation")
Вы забыли нулевую проверку при вызове, таким образом, исключение NullPointerException.
Что касается почему вы получаете обратно null
- это может быть из-за SecurityManager (как показывают документы), но в этом случае проблема, вероятно, в том, что InetAddress.getLocalHost()
дал вам localhost address, и, следовательно, интерфейс, который вы получили, является интерфейсом обратной связи Интерфейс обратной связи, являющийся имитируемым интерфейсом, не имеет MAC-адреса, поэтому NetworkInterface.getHardwareAddress()
вернет null
.
Делая шаг назад, ваша первая ошибка - использовать InetAddress.getLocalHost()
. Компьютер может иметь несколько сетевых интерфейсов с несколькими IP-адресами (например, проводной интерфейс Ethernet и интерфейс WLAN, а также виртуальные интерфейсы, такие как шлейф или для VPN-клиента). Таким образом, в общем случае существует не «MAC-адрес», а 0-n MAC-адресов, в зависимости от конфигурации системы.
Вам необходимо выяснить, как вы выбираете свой MAC-адрес среди доступных. Вы можете использовать NetworkInterface.getNetworkInterfaces()
для извлечения всех интерфейсов, которые есть в системе (даже деактивированных), а затем пройти через них, чтобы решить, какой из них вам нравится (а какой имеет MAC-адрес).