Доступ к ресурсам локально в апплете на IE6

Пытался следовать http://java.sun.com/docs/books/tutorial/uiswing/components/icon.html когда натолкнулся на ошибку. Кажется, что getResource возвращает ноль при локальном доступе к странице (т. Е. Когда URL, скажем, "C:\projects\html\test.html") в IE6. Класс и ресурс находятся в одном файле Jar.

Кто-нибудь знает причины и обходные пути (если таковые существуют)?

Встречается в Win XP/IE 6/JRE 1.6.0_11, но не в Win XP/IE 7/1.6.0-b105.

В среде, где он работает, загрузчик классов:

sun.plugin.security.PluginClassLoader  

В среде, где это сломано, это:

sun.plugin2.applet.Applet2ClassLoader

5 ответов

Как упоминал Ник, Java 6 update 11 изменил настройки безопасности для апплетов, работающих в файловой системе. Используя getResource(), вы загружаетесь с URL-адреса и можете случайно столкнуться с новыми ограничениями, которые на самом деле к вам не относятся.

Вместо этого попробуйте getResourceAsStream(), вот так:

InputStream in = getClass().getResourceAsStream("image.jpg");
Image image = ImageIO.read(in);
ImageIcon icon = new ImageIcon(image);

Я на самом деле не проверял это, но я обычно не запускаю апплеты из файловой системы:)

Похоже, разница в том, что вы используете плагин следующего поколения в версии 1.6u10. Вы можете отключить его и использовать более старую технологию плагинов, изменив соответствующий параметр на вкладке "Дополнительно" в панели управления Java. Это может как минимум изолировать вашу проблему от конкретной версии.

Вы проверяли сообщения в консоли Java?

Насколько я помню, Internet Explorer 6 имеет более строгие правила безопасности, чем старые IE5 или Netscape/Mozilla. В то время как Netscape позволяет апплетам, открытым с локального диска, получать доступ к ресурсам на этом диске, IE этого не делает. В этом случае вы можете увидеть исключение безопасности в консоли.

Чтобы обойти это, настройте локальный веб-сервер, например, Tomcat, и через него откройте html-файл, содержащий апплет, например, http://127.0.0.1:8080/some/applet.html. Тогда апплет больше не будет находиться на вашем жестком диске и сможет получить доступ к любому ресурсу, обслуживаемому сервером http://127.0.0.1:8080/.

Локальные настройки безопасности очень ограничены, см. Отчет по безопасности (подобный вопрос задан здесь).

Как предлагается в другом ответе, запустите его на веб-сервере (например, tomcat), и большинство ваших проблем должно исчезнуть.

Просто предположение: возможно, здесь применяются ограничения безопасности апплета? В общем, если апплет не подписан, он не имеет доступа к локальным ресурсам. Я не уверен, как это работает, если апплет открывается с локально сохраненной страницы, но это вполне может быть основной причиной.

Подписание апплета и принятие сертификата в браузере может решить проблему.

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