首页 > 解决方案 > 当安装了两个 64/32 位 JVM 版本时,JNLP 应用程序如何选择 JVM 的(正确位数)版本?

问题描述

因为我在 64 位和 32 位环境中都开发 Java 应用程序,所以我在我的开发环境中维护这两个 Java VM。我开发的一个 JNLP 应用程序必须在 32 位环境中运行,因为它调用了一个需要 32 位环境的 dll。

大多数时候,JNLP 似乎确实“知道”它需要在 32 位环境中运行,但我怀疑我只是很幸运。当我将我的 64 位 Java 升级到版本 10 时,它导致 JNLP 失败,因为 JNLP 试图在 64 位环境中运行。当我将 64 位环境恢复到 1.8 版本(与 32 位环境相同的版本,应用程序又开始在 32 位环境中运行。

但是它怎么知道这样做呢?如果 Java 版本相同,JNLP 应用程序是否有一些属性导致它默认为 32 位环境?

有没有办法通过在环境中设置某些内容或在构建时指定特定的 JRE 库来保证 JNLP 将在 32 位环境中运行?

标签: java64-bit32bit-64bitjnlp

解决方案


有没有办法通过在环境中设置某些内容或在构建时指定特定的 JRE 库来保证 JNLP 将在 32 位环境中运行?

简短的回答显然是:不。


下面解释了在 JNLP 规范文件中指定要使用的版本的方式:

您应该能够通过指定 32 位架构的资源来强制选择 32 位 JVM;例如

  <resources os="Linux" arch="x86">
    <nativelib href="lwjgl-x86-linux.jar"/>
  </resources>
  <resources os="Linux" arch="i386">
    <nativelib href="lwjgl-x86-linux.jar"/>
  </resources>

(出于开发/测试目的,您可以使用省略 64 位资源的开发 JNLP 文件......)

但是,正如您所发现的,如果 JNLP 客户端将使用 64 位 JVM(如果可用),这将无济于事……然后抱怨缺少 64 位资源。

可以修改 JNLP 客户端/启动器做出选择的方式。但是,这取决于您使用的启动器;例如,它可能取决于您使用的 Java 插件,以及您是否可以将其配置为使用特定的 JRE。

事实证明,一些 JNLP 客户端决定使用 32 位还是 64 位 JRE 的方式存在已知错误/不一致。

但是,JNLP 和 JavaWebstart在 Java 9 及以后版本中已被弃用,因此您可能应该寻找替代方案。特别是如果您/您的客户不打算为 Oracle Java 商业支持付费。


推荐阅读