Java小程序停止更新JRE 7u21后工作(Java applet stopped working

2019-08-31 11:58发布

我的Java小程序一旦停止JRE已更新为7u21工作。

简短的摘要:

  • 我得到的例外是:netscape.javascript.JSException和
    java.lang.NoClassDefFoundError。 小应用程序工作得很好,直到JRE 7u21。

  • 小应用程序是使用Oracle的DeployJava.js嵌入在网页中。

  • 小程序签署,它使用LiveConnect的触发事件,它接入USB和通过JNI串行端口,它使用的代码从多个JAR文件。

  • 故障发生在测试的所有桌面浏览器(火狐,Chrome,IE8 / 9和Mac上的Safari)。

细节:

  • 我有一个Java小程序,可以让我的网站上有一个USB设备进行通信。

  • 在过去的一年小程序一直运作良好。

  • 一旦JRE7更新21发布 - 小程序停止工作。

  • 小应用程序是使用Oracle的DeployJava.js图书馆网页(ASP.NET)主办。

  • 它采用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)

为了缓解这个问题,我添加了以下行到applet的ant脚本“清单”部分:

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头“缓存控制” =“无缓存”

  • 添加HTTP头“缓存控制” =“无缓存,没有存储,必重新验证”

  • 使用最新的DeployJava.js从http://java.com/js/deployJava.txt (更名为.js文件后)

该小程序已经具有下列特征:

  • 标记安全“所有的权限”的JNLP

  • 主要JAR与证书从外部CA签署

  • 小应用程序代码在内部运行AccessController.doPrivileged块。

我是一个java的新手,所以请不要忽视明显的解决方案...

在此先感谢您的帮助,

盖伊。

Answer 1:

该错误是最有可能的,因为一个jar文件丢失,或者不能由小应用程序进行访问。 这是因为:

  1. 该JAR是在旧JVM的类路径,但不是新的。
  2. 出于某种原因,你没有JAR不经意间散发的小程序,问题是无关的升级7U2。
  3. 对于小程序访问外部JAR文件的规则已经改变了不知何故,可能与安全,而你需要做别的事情,包括他们。

你缺少的JAR文件是javahidapi,它可以在这里找到: https://code.google.com/p/javahidapi/ 。 如果你确保它发现它的方式到classpath,你的小应用程序将工作。



Answer 2:

贝利S是right.Make确保Java可以看到罐子文件。如果使用Linux,那么设置路径在/ etc /环境路径变量或在Windows中,我的电脑上刚刚点击右键,进入属性,环境变量和有设置路径



Answer 3:

部署小程序越来越甲骨文修复安全漏洞显著困难。

你提到你的applet签署-在所有的JAR文件的签署? 有几个你需要在你的清单文件来得到这个工作的新属性。

概述这里: http://www.oracle.com/technetwork/java/javase/tech/java-code-signing-1915323.html

你会需要这个特别得到清单整理出来: http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/manifest.html

如果您使用未签名,或者未全部由您签署了一些陶罐,你需要的细节在这里也: http://docs.oracle.com/javase/7/docs/technotes/guides /jweb/mixed_code.html



Answer 4:

这不是可以设置一个小程序的属性7.0.21后和它下面的工作都在版本。

Trusted-Library: true

属性适用于低于7.0.21的那些导致7.0.21后显示一个安全对话框(最可能是你的代码被封锁)。 如果你只把

Caller-Allowable-Codebase: *.yourdomain.com

你的清单文件,它开始正常工作与7.0.21后的版本,但这次它低于7.0.21版本停止。 这是一个巨大的混乱。

不过,他们已经固定的最新版本(7.0.51)本病的行为。 因此,我建议使用这两种属性( Trusted-LibraryCaller-Allowable-Codebase ),这将针对Java 6和7.0.51工作。 我不认为这是为7.0.21和7.0.45之间的那些解决方案。 (我不支持他们,我们要求我们的客户升级到7.0.51)。

https://blogs.oracle.com/java-platform-group/entry/7u45_caller_allowable_codebase_and



Answer 5:

我不知道DeploJava.js BU的问题显然是一个classpath的问题。

作为一种方法,我们定义归档变量的所有第三方库。 DeploJava.js可能具有相似的特性。

<APPLET   codebase="./"  code="AppletMainClass"   archive="printer_applet.jar, pdf-renderer.jar, library3.jar">


Answer 6:

这毁了我整天跟我发生(在Java环境)相同,Netscape的JSObject是存在于JRE的plugin.jar和jfxrt.jar,你需要排除一个。 如果你需要一个JS调用,我想你需要plugin.jar JRE 6不包含最新的jfxrt.jar(用于网络应用程序的JavaFX相关的解决方案),因此它适用于JRE6工作

同时,除非你想单独签署个人罐子不使用受信任库。 希望这有助于 - Chaithanya



文章来源: Java applet stopped working after update to JRE 7u21