将JNLP修复为JRE 1.6并安装JRE 1.7时,Java WebStart启动失败

时间:2012-06-06 13:09:12

标签: java java-7 jnlp java-web-start

在我的公司,我们下载并启动与JRE 1.6.0_20绑定的JNLP应用程序。我们使用系统缓存功能下载JAR。

当我们在PC上安装JRE 1.7时,WebStart无法启动。当我们启用日志时,我们会看到以下异常:

java.lang.ExceptionInInitializerError
    at com.sun.deploy.net.protocol.https.Handler.openConnection(Unknown Source)
    at java.net.URL.openConnection(Unknown Source)
    at com.sun.deploy.net.BasicHttpRequest.createUrlConnection(Unknown Source)
    at com.sun.deploy.net.BasicHttpRequest.doRequest(Unknown Source)
    at com.sun.deploy.net.BasicHttpRequest.doGetRequestEX(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.getCachedFile(Unknown Source)
    at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
    at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassCastException: sun.security.ssl.X509TrustManagerImpl cannot be ast to com.sun.net.ssl.internal.ssl.X509ExtendedTrustManager
    at com.sun.deploy.security.X509ExtendedDeployTrustManager.<init>(Unknown Source)
    at com.sun.deploy.net.protocol.https.Handler$Initializer$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.deploy.net.protocol.https.Handler$Initializer.<clinit>(Unknown Source)
... 16 more

是否有已知的解决方法?

3 个答案:

答案 0 :(得分:1)

这是一个安装问题,多个JRE的插件启动问题。使用更新的JRE重新安装所有插件。 See bug database

答案 1 :(得分:1)

这可能不适用于您的情况,但我找到了解决此问题的解决方案。我修改了JNLP文件以指定要使用的JRE。在我们的例子中,JNLP文件具有以下内容:

<j2se java-vm-args="-Xmx512m -Dsun.java2d.noddraw=true" version="1.6+"/>

显然,“1.6+”允许在1.7下执行。所以我删除了“+”,如下所示:

<j2se java-vm-args="-Xmx512m -Dsun.java2d.noddraw=true" version="1.6"/>

现在应用程序运行正常。如果您可以更改通过应用程序URL提供的JNLP文件,那将是最好的。在我们的例子中,这不是一个选项(JNLP来自第三方软件包),所以我下载了JNLP,编辑了它,现在我们通过双击修改后的.jnlp文件启动应用程序(或运行1.6 javaws.exe就可以了。)

如果您需要更多信息,请some documentation on the JNLP file format

答案 2 :(得分:0)

在我的情况下,以下工作解决了这个问题 -

我需要添加'*',这意味着将在机器上找到最新的1.6 JRE。出于某种原因,仅仅使用'1.6'对我来说不起作用,1.7继续阻止发射。