AccessControlException в Java-апплете

Я создал апплет на веб-странице, но всякий раз, когда я запускаю его, я получаю это:

Exception in thread "Thread-13" java.security.AccessControlException: access denied ("java.io.FilePermission" "defensebg.png" "read")
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkRead(Unknown Source)
    at java.io.File.canRead(Unknown Source)
    at javax.imageio.ImageIO.read(Unknown Source)
    at Defense.run(Defense.java:63)
    at java.lang.Thread.run(Unknown Source)

Как это исправить?

2 ответа

Решение

Поскольку я немного знаю о вашем апплете и убежден, что эти изображения являются неотъемлемой частью приложения, я возьму другой подход к paulms4.

Забудь File экземпляров. Они ни работоспособны для этого, ни необходимы. Только доверенный апплет может получить доступ к FileНо даже тогда единственное место, где апплет может установить File это тот, который указывает на места в файловой системе ПК пользователя. Очевидно, что изображения для вашего апплета недоступны таким образом (ОК - они могут быть в кеше браузера, но это нам бесполезно).

Было бы более типично (и проще) получить доступ к ресурсу апплета URL, URL может быть установлен относительно базы кода или базы документов апплета. Если изображения на самом деле находятся внутри Jar, они становятся встроенным ресурсом - см. Информацию. страница о том, как получить URL.

Большинство методов в J2SE, которые загружают ресурс "только для чтения", примут File, URL или же InputStream, Я использую URL чаще всего для его общего использования. URL может представлять веб-ресурс, файл в локальной файловой системе или ресурс, скрытый глубоко внутри файла Jar (будь то в Интернете или в локальной файловой системе).

Q: Как мне это исправить?

A: Э-э - не пытаетесь читать файлы на клиентском ПК из апплета?

Или почитайте про "Файлы политики":

Java-апплеты запускаются в защищенной "песочнице". Это сделано специально для безопасности конечного пользователя:

Другие вопросы по тегам