Java-апплет не может перезагрузиться в Internet Explorer - PullRequest
3 голосов
/ 21 апреля 2011

У меня есть апплет с кнопкой logout".Кнопка завершает сеанс, вызывая скрипт CGI, а затем убивает Java VM, вызывая System.exit().Проблема заключается в том, что когда пользователь пытается войти снова в том же окне браузера - апплет не может загрузить с ClassNotFoundException:

load: class lucent/fm/parts/BlankPage.class not found.
java.lang.ClassNotFoundException: lucent.fm.parts.BlankPage.class
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: open HTTP connection failed:http://example.com/html/lucent/fm/parts/BlankPage/class.class
at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
... 7 more
Exception: java.lang.ClassNotFoundException: lucent.fm.parts.BlankPage.class 

Он появляется только в Internet Explorer, а не в Firefox.Плагин Java:
Java Plug-in 1.6.0_20<br> Using JRE version 1.6.0_20-b02 Java HotSpot(TM) Client VM

Прямой сценарий следующий: :
1. Войдите в систему (загрузите апплет).
2.Выйдите из системы (он закрывает апплет, но окно браузера остается).
3. Нажмите на адресную строку и нажмите Enter.
4. Не удается загрузить апплет, и в консоли Java можно увидеть ClassNotFoundException..
5. Обновить страницу - сервер перенаправляет на страницу входа;после входа апплет снова не загружается и выдает исключение.

Просмотр журнала доступа Apache показал, что на шаге 4 браузер (или плагин) пытается загрузить файлы JAR и получает ошибку HTTP.Это нормально, потому что сеанс истек.Странная вещь происходит в 5-м пункте - нет запроса на банки!Кажется, что браузер или плагин запоминает неудачные попытки и даже не пытается загрузить файлы JAR.Он только пытается загрузить необработанный файл .class, которого нет на сервере.

Правильно ли сделан мой вывод?Как я могу справиться с такой ошибкой?Можно ли заставить плагин Java загружать файлы JAR?

Я проверил, что включение кэширования в панели управления Java не помогает.Установка параметра codebase_lookup на "false" также не помогает.Это только препятствует попытке загрузить файл "class" напрямую.

Заранее благодарим за любые предложения.

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

У меня есть апплет с кнопкой «Выход». Кнопка завершает сеанс, вызывая скрипт CGI, а затем убивает Java VM, вызывая System.exit ().

Апплет, вызывающий System.exit(anyNumber), грубо эквивалентен гостю, сжигающему дом своего хозяина. Апплеты (даже доверенные апплеты) не должны никогда пытаться завершить работу виртуальной машины. Виртуальная машина будет завершена браузером, когда все апплеты на странице, совместно использующей виртуальную машину, завершат свои методы destroy() и последующий период времени, выбранный браузером.

Кстати, я вспоминаю одну версию Mozilla / FF, в которой вызов System.exit(int) не только завершил работу виртуальной машины, но и привел к сбою браузера!

1 голос
/ 21 апреля 2011

Если ваш html с апплетами не является статичным (cgi, php и т. Д.), То после выхода из системы вы можете попытаться заставить другой URL-адрес указывать на файл jar (т.е. вместо «my.jar» используйте «my.jar» ? случайный = 1235232" ).

Также вы можете попробовать поиграть с HTTP-заголовками кеша.

Еще один потенциальный обходной путь - переконфигурировать apache, чтобы он всегда служил банкам - даже когда сессия была закрыта (если это приемлемо).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...