我们的客户并行安装了部分 JRE x86 和 x64。默认情况下,JNLP 在 Windows 上从 HKEY Classes Root JNLPFile 启动。但是,这显示 x86 或 x64 路径。
如果它是 x86 应用程序,并且该应用程序是使用 x64 javaws 启动的,那么 x64 javaws webstart 是否会更改为 x86 路径?
属性“arch”无效,应用程序在启动时崩溃。
最佳答案
Java 8u102 引入了 bug在 Java Web Start 中,当安装了 64 位和 32 位 JRE/JDK 并且应用程序需要不同的 32/64 位 JAR 时会发生这种情况(在我们的例子中,它是一个 SWT 应用程序,需要不同的 swt.jar对于每个拱门)。
看来您可以通过在 jnlp.xml 文件中首先指定 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,请注意,需要在特定于架构的资源部分中指定 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>
关于java - 使用现有的 JRE x86 和 x64 安装启动 JNLP 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38629737/