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

标签 java java-web-start jnlp

我们的客户并行安装了部分 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/

相关文章:

java - Mac OS X Big Sur 上 webstart 的 JDialog 全屏问题

java - 我必须在 Webstart 应用程序中显式调用 System.exit() 吗?

java - 从 Java Web Start (JNLP) 修改 Windows 防火墙规则

java - 使用 Java 代理自动化 JNLP 应用程序

java - 在 java web start 中,jar 文件下载到哪里?

java - Libgdx android调试崩溃

java - 从 ScheduleAtFixedRate 转换为 CachedThreadPool

java - HPE UFT 干扰计算机中的 java 配置

java - 如何在 Spring Cloud Zuul 中配置路由

java - 通过套接字的整数 - 错误字节