Доступ к ресурсам локально в апплете на IE6 - PullRequest
2 голосов
/ 30 марта 2009

Пытался следовать 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 ]

2 голосов
/ 24 июня 2009

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

Попробуйте вместо этого getResourceAsStream (), например:

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

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

1 голос
/ 06 апреля 2009

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

1 голос
/ 08 июня 2009

Проверяли ли вы сообщения в консоли 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/.

0 голосов
/ 23 июня 2009

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

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

0 голосов
/ 30 марта 2009

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

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

...