我们的客户部分并行安装了JRE x86和x64。默认情况下,JNLP在Windows上启动,位于HKEY Classes Root JNLPFile中。但是,这显示了x86或x64路径。使用JRE x86和x64的现有安装启动JNLP应用程序?
如果它是x86应用程序,并且应用程序以x64 javaws启动,则x64 javaws webstart将更改为x86路径?
属性“拱”没有任何作用,在应用程序启动时chrashs。
我们的客户部分并行安装了JRE x86和x64。默认情况下,JNLP在Windows上启动,位于HKEY Classes Root JNLPFile中。但是,这显示了x86或x64路径。使用JRE x86和x64的现有安装启动JNLP应用程序?
如果它是x86应用程序,并且应用程序以x64 javaws启动,则x64 javaws webstart将更改为x86路径?
属性“拱”没有任何作用,在应用程序启动时chrashs。
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>
感谢您报告此事件。我们正在努力解决这个问题 - https://bugs.openjdk.java.net/browse/JDK-8161986。 – Fairoz