使用现有的JRE x86和x64安装启动JNLP应用程序?

时间:2016-07-28 07:28:09

标签: java java-web-start jnlp

我们的客户部分并行安装了JRE x86和x64。默认情况下,JNLP在Windows上从HKEY Classes Root JNLPFile启动。但是,这会显示x86或x64路径。

如果它是一个x86应用程序并且应用程序是用x64 javaws控制的,那么x64 javaws webstart会改变到x86路径吗?

属性“arch”无效,应用程序在启动时会崩溃。

1 个答案:

答案 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>