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-апплеты запускаются в защищенной "песочнице". Это сделано специально для безопасности конечного пользователя: