Aplet Java przestał działać po aktualizacji do JRE 7u21

Mój aplet java przestał działać po zaktualizowaniu JRE do wersji 7u21.

Krótkie podsumowanie:

Wyjątki, które otrzymuję, to: netscape.javascript.JSException i
java.lang.NoClassDefFoundError. aplet działał dobrze do JRE 7u21.

Aplet jest osadzony na stronie internetowej przy użyciu Oracle DeployJava.js.

Aplet jest podpisany, używa LiveConnect do zdarzeń pożarowych, uzyskuje dostęp do USB i portów szeregowych za pośrednictwem JNI, używa kodu z wielu plików JAR.

Awaria występuje we wszystkich testowanych przeglądarkach (Firefox, Chrome, IE8 / 9 i Safari na Macu).

Detale:

Mam aplet java, który pozwala mojej stronie komunikować się z urządzeniem USB.

Aplet działa dobrze przez ostatni rok.

Po wydaniu aktualizacji JRE7 21 aplet przestał działać.

Aplet jest hostowany na stronie internetowej (ASP.NET) przy użyciu biblioteki Oracle DeployJava.js.

Wykorzystuje LiveConnect do podnoszenia zdarzeń z powrotem do mojego kodu javascript.

Pierwszym problemem, który miałem na JRE 7u21, był wyjątek od pierwszej próby podniesienia zdarzenia przez 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)

w celu złagodzenia tego problemu dodałem następujący wiersz do sekcji „manifest” w skrypcie mrówkowym dla apletu:

attribute name="Trusted-Library" value="true" 

Zbudowałem aplet za pomocą JDK 7u21 i wydawało się, że pomaga:

po tym zacząłem otrzymywać kolejny błąd - wierzę, że ten został rozwiązany, ale mógł spowodować następny problem.

drugi problem to: aplet wywołuje kod z kilku plików JAR. przy pierwszym wywołaniu kodu w innym pliku JAR (nie w aplecie) kończy się niepowodzeniem z następującym wyjątkiem:

**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)

Próbowałem już następujących środków - bez powodzenia:

dodaj nagłówek HTTP „Cache-Control” = „no-cache”

dodaj nagłówek HTTP „Cache-Control” = „no-cache, no-store, must-revalidate”

użyj najnowszej wersji DeployJava.js zhttp://java.com/js/deployJava.txt (po zmianie nazwy na .js)

Aplet ma już następujące funkcje:

oznaczyć „wszystkie uprawnienia” w jnlp

główny plik JAR jest podpisany certyfikatem z zewnętrznego ośrodka CA.

kod apletu działa wewnątrz aAccessController.doPrivileged blok.

Jestem początkującym java, więc proszę nie lekceważyć oczywistych rozwiązań ...

Z góry dziękuje za twoją pomoc,

Chłopak.

questionAnswers(6)

yourAnswerToTheQuestion