我们的客户部分并行安装了JRE x86和x64。默认情况下,JNLP在Windows上从HKEY Classes Root JNLPFile启动。但是,这会显示x86或x64路径。
如果它是一个x86应用程序并且应用程序是用x64 javaws控制的,那么x64 javaws webstart会改变到x86路径吗?
属性“arch”无效,应用程序在启动时会崩溃。
答案 0 :(得分:2)
Java 8u102在Java Web Start中引入了bug,当安装了64位和32位JRE / JDK且应用程序需要32/64位的不同JAR时(在我们的例子中,它)是一个SWT应用程序,每个拱门都需要不同的swt.jar。
似乎您可以通过在jnlp中首先指定64位资源来解决此错误。例如:
<?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>
关键是arch="amd64"
的资源出现在arch="x86"
如果您的应用程序只能使用32位且永远不能使用64位JRE运行,则可以通过为64-指定无效的j2se版本来强制javaws使用32位JRE。在这种情况下位(1.0.0
,请注意,需要在特定于arch的资源部分中指定j2se版本才能使其工作)。
<?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>