Локален достъп до ресурси в аплет на 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

person Chry Cheng    schedule 30.03.2009    source източник


Отговори (5)


Както Ник спомена, Java 6 актуализация 11 промени настройките за сигурност за аплети, работещи във файловата система. Като използвате getResource(), вие зареждате от URL адрес и може случайно да сте се сблъскали с новите ограничения, които всъщност не трябва да се отнасят за вас.

Вместо това опитайте getResourceAsStream(), като това:

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

Всъщност не съм тествал това, но обикновено не стартирам аплети от файловата система :)

person Spyder    schedule 24.06.2009

Звучи като разликата там е, че използвате добавка за "следващо поколение" технология в 1.6u10. Можете да го деактивирате и да използвате по-старата технология на плъгина, като промените подходящата опция в раздела Разширени в контролния панел на Java. Това може най-малкото да изолира проблема ви до определена версия.

person Joel Carranza    schedule 06.04.2009

Проверихте ли за съобщения в Java Console?

Доколкото си спомням Internet Explorer 6 има по-строги правила за сигурност от по-старите IE5 или Netscape/Mozilla. Докато Netscape позволява на аплетите, отворени от локалното устройство, да имат достъп до ресурсите на това устройство, IE не го прави. В този случай може да видите някакво изключение за сигурност в конзолата.

За заобиколно решение настройте локален уеб сървър, напр. Tomcat и отворете чрез него html файла, съдържащ аплета, напр. http://127.0.0.1:8080/some/applet.html. Тогава аплетът вече не е от вашия harddist и има достъп до всеки ресурс, обслужван от сървъра http://127.0.0.1:8080/.

person Peter Kofler    schedule 08.06.2009

Настройките за защита, изпълнявани локално, са много ограничителни, вижте отчет за сигурност (зададен подобен въпрос тук).

Както се предлага в друг отговор, стартирайте го в уеб сървър (напр. tomcat) и повечето от вашите проблеми трябва да бъдат си отиде.

person Pool    schedule 22.06.2009

Само предположение: може би ограниченията за сигурност на аплета се прилагат тук? Като цяло, освен ако аплетът не е подписан, не му е разрешен достъп до локални ресурси. Не съм сигурен как работи това, ако аплетът е отворен от локално съхранена страница, но това може да е основната причина.

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

person david a.    schedule 30.03.2009
comment
Едва ли. Аплетът е подписан и аз съм приел сертификата. - person Chry Cheng; 30.03.2009
comment
Не предлагайте да го подписвате - предполагам, че оригиналният автор няма опит да може да провери дали кодът е защитен. - person Tom Hawtin - tackline; 30.03.2009