2016-07-28 37 views
2

我们的客户部分并行安装了JRE x86和x64。默认情况下,JNLP在Windows上启动,位于HKEY Classes Root JNLPFile中。但是,这显示了x86或x64路径。使用JRE x86和x64的现有安装启动JNLP应用程序?

如果它是x86应用程序,并且应用程序以x64 javaws启动,则x64 javaws webstart将更改为x86路径?

属性“拱”没有任何作用,在应用程序启动时chrashs。

回答

2

Java 8u102在Java Web Start中加入了一个bug,当安装了64位和32位JRE/JDK并且应用程序需要32/64位的不同JAR时(在我们的例子中,它是SWT应用程序,每个拱需要一个不同的swt.jar)。

看来你可以通过在jnlp中首先指定64位资源来解决这个bug。例如:

<?xml version="1.0" encoding="UTF-8"?> 
    <jnlp spec="1.0+" codebase="file:///c:/jnlp" href="demo.jnlp"> 
    <information> 
     <title>Demo</title> 
    </information> 
    <security> 
     <all-permissions/> 
    </security> 

    <resources> 
     <j2se version="1.8+"/> 
     <jar href="demo.jar" /> 
    </resources> 
    <resources os="Windows" arch="amd64"> 
     <jar href="win64/swt.jar"/> 
    </resources> 
    <resources os="Windows" arch="x86"> 
     <jar href="win32/swt.jar"/> 
    </resources> 

    <application-desc main-class="package.to.MainClass"/> 
</jnlp> 

关键是如果你有一个应用程序,将只有32位工作,绝不会只有64位JRE中运行,对于arch="amd64"资源资源之前出现arch="x86"

完全可以通过为64位指定无效的j2se版本来强制javaws使用32位JRE(在这种情况下为1.0.0,请注意,j2se版本需要在特定于arch的资源部分内指定才能工作) 。

<?xml version="1.0" encoding="UTF-8"?> 
<jnlp spec="1.0+" codebase="file:///c:/jnlp" href="demo.jnlp"> 
    <information> 
     <title>Demo</title> 
    </information> 
    <security> 
     <all-permissions/> 
    </security> 

    <resources> 
     <jar href="demo.jar" /> 
    </resources> 
    <resources os="Windows" arch="amd64"> 
     <j2se version="1.0.0"/> 
    </resources>  
    <resources os="Windows" arch="x86"> 
     <j2se version="1.8+"/> 
     <jar href="win32/swt.jar"/> 
    </resources> 

    <application-desc main-class="package.to.MainClass"/> 
</jnlp> 
+0

感谢您报告此事件。我们正在努力解决这个问题 - https://bugs.openjdk.java.net/browse/JDK-8161986。 – Fairoz

相关问题