Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当安装了两个64/32位JVM版本时,JNLP应用程序如何选择JVM的(正确的位)版本?_Java_64 Bit_32bit 64bit_Jnlp - Fatal编程技术网

Java 当安装了两个64/32位JVM版本时,JNLP应用程序如何选择JVM的(正确的位)版本?

Java 当安装了两个64/32位JVM版本时,JNLP应用程序如何选择JVM的(正确的位)版本?,java,64-bit,32bit-64bit,jnlp,Java,64 Bit,32bit 64bit,Jnlp,因为我在64位和32位环境中开发Java应用程序,所以我在开发环境中维护这两个Java VM。我开发的JNLP应用程序必须在32位环境中运行,因为它调用需要32位环境的dll 大多数时候,JNLP似乎“知道”它需要在32位环境中运行,但我怀疑我只是幸运而已。当我将64位Java升级到版本10时,它导致JNLP失败,因为JNLP试图在64位环境中运行。当我将64位环境恢复到1.8版(与32位环境的版本相同)时,应用程序再次开始在32位环境中运行 但是它怎么知道要这样做呢?如果Java版本相同,JN

因为我在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位环境

有没有一种方法可以保证JNLP在32位环境中运行,方法是在环境中设置一些东西,或者在我构建时指定一个特定的JRE库

有没有一种方法可以保证JNLP在32位环境中运行,方法是在环境中设置一些东西,或者在我构建时指定一个特定的JRE库

简单的回答显然是:不


以下说明了指定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客户机没有帮助

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

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


但是,JNLP和JavaWebstart是,因此您可能应该寻找替代方案。特别是如果您/您的客户不打算为Oracle Java商业支持付费。

经过大量实验,我发现了以下几点

首先,修改JNLP安装的XML中的Resources元素以接受特定的体系结构(例如x86)似乎不起作用,实际上会抛出一个错误

其次,安装任何大于1.8的jvm都会导致JNLP使用该jvm。由于Oracle不支持超过1.8的32位jvm,这意味着JNLP应用程序将在64位环境中运行。显然,JNLP将在可用的最新版本上运行。至少我机器上的Java行为似乎表明了这一点

第三,如本文所述,bugs.openjdk.java.net/browse/JDK-8029922,如果您在同一台机器上同时运行32位和64位jvm,那么安装这些jvm的顺序很重要。为了确保JNLP应用程序选择32位jvm,您需要第二次安装该版本的java。换句话说,JNLP apparantly运行安装的java的最后一个版本,而不管jvm的比特数是多少,除非首先安装的jvm是java的较新版本。然后,较新的版本是运行JNLP的版本

由于Oracle似乎不再支持1.8版之后的32位版本的java,这意味着如果您需要在32位环境中运行JNLP,则必须安装java 1.8版或更早版本才能实现这一点


<> P>既然Webstart和JNLP被弃用,正如上面的问题回答者所建议的,现在是考虑不同的技术来部署Webstart以外的java应用程序了。

不幸的是,它现在正在抛出一个错误。我输入了以下错误:我得到了这个错误:没有为这个平台指定应用程序资源。请联系应用程序的供应商,以确保这是一个受支持的平台OK。因此,这不会导致JNLP客户端选择特定的JRE。在这种情况下,唯一的选择是配置平台的JNLP客户端…如果可能的话。(这实际上是有道理的。如果一个JNLP规范文件可能导致使用不同的JRE…而用户不知道的话,这是一个潜在的安全问题。)显然,这是一个已知的错误。至少到了1.7(尽管我运行的是1.8)。