Мой java-апплет перестает работать, когда JRE обновлен до 7u21.
Краткое описание:
-
Исключения, которые я получаю: netscape.javascript.JSException и
java.lang.NoClassDefFoundError. апплет работал нормально до тех пор, пока JRE 7u21. -
Апплет встроен в веб-страницу с использованием Oracle DeployJava.js.
-
Апплет подписан, он использует LiveConnect для запуска событий, доступа к USB и последовательным портам через JNI, он использует код из нескольких файлов JAR.
-
Ошибка происходит во всех проверенных браузерах на рабочем столе (Firefox, Chrome, IE8/9 и Safari на Mac).
Подробнее:
-
У меня есть Java-апплет, который позволяет моему веб-сайту общаться с USB-устройством.
-
Апплет работает хорошо в течение прошлого года.
-
Как только было выпущено обновление JRE7 21, апплет перестает работать.
-
Апплет размещен на веб-странице (ASP.NET) с использованием библиотеки Oracle DeployJava.js.
-
Он использует LiveConnect, чтобы поднять события на мой код javascript.
Первой проблемой, с которой я столкнулся JRE 7u21, было исключение при первой попытке поднять событие через LiveConnect:
netscape.javascript.JSException: JavaScript error while calling "_notify"
at sun.plugin2.main.client.MessagePassingJSObject.newJSException(Unknown Source)
at sun.plugin2.main.client.MessagePassingJSObject.waitForReply(Unknown Source)
at sun.plugin2.main.client.MessagePassingJSObject.call(Unknown Source)
at <myapplet>.fireJavascriptEvent(Unknown Source)
at <myapplet>$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.asec.easypark.applets.HomeloadingApplet.start(Unknown Source)
at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.start(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
чтобы смягчить эту проблему, я добавил следующую строку в раздел "манифест" в ant script для апплета:
attribute name="Trusted-Library" value="true"
Я построил апплет с помощью JDK 7u21, и он помог:
после этого я начал получать еще одну ошибку, поэтому я считаю, что этот вопрос был решен, но это, возможно, вызвало следующую проблему.
Вторая проблема заключается в следующем: апплет вызывает код из нескольких файлов JAR. при первом вызове кода в другом JAR файле (а не в апплете) не выполняется следующее исключение:
**java.lang.NoClassDefFoundError**: com/codeminders/hidapi/HIDManager
at <PackageInSecondJar>.communication.HIDTransmitter.open(Unknown Source)
at <PackageInSecondJar>.communication.HIDTransmitterSearcher.find(Unknown Source)
at <PackageInSecondJar>.communication.CompositeTransmitterSearcher.find(Unknown Source)
at <PackageInAppletJar>.communication.AppletCommunicationBroker.setupDeviceProxy(Unknown Source)
at <PackageInAppletJar>.communication.AppletCommunicationBroker.setup(Unknown Source)
at <PackageInAppletJar>.<TheApplet>$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at <PackageInAppletJar>.<TheApplet>.start(Unknown Source)
at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.start(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Я уже пробовал следующие меры - без успеха:
-
добавить HTTP-заголовок 'Cache-Control' = 'no-cache'
-
добавить HTTP-заголовок 'Cache-Control' = 'no-cache, no-store, must-revalidate'
-
используйте последнюю версию DeployJava.js из http://java.com/js/deployJava.txt (после переименования в .js)
Апплет уже имеет следующие функции:
-
отметьте безопасность всех разрешений в jnlp
-
основной JAR подписан с сертификатом из внешнего CA
-
код апплета выполняется внутри блока
AccessController.doPrivileged
.
Я новичок в java, поэтому, пожалуйста, не игнорируйте очевидные решения...
Заранее благодарим за помощь,
Гай.