首页 文章

JavaFX桌面应用程序通过Web启动(jnlp) - 行为不一致

提问于
浏览
3

尝试通过Java Web Start部署JavaFX桌面应用程序时,我会遇到不一致的行为,特别是当它决定下载jar时 . 我的代码已签名 .

需要什么:

  • 桌面应用程序100%脱机工作,但在有Internet连接时检查更新 .

  • 如果找到更新,则询问用户是否要下载 . 如果是,请更新并运行 . 如果不是,请运行缓存版本 .

  • 需要制作桌面图标 .

目前正在计划的事情:

  • 首次运行时,Web start会完美下载并验证应用程序 .

  • 创建了快捷方式,并在Windows中显示可以卸载的软件 .

  • 从.jnlp文件运行并连接互联网时,效果很好 .

  • 从带有互联网的桌面(从未断开连接)运行时,效果很好 .

  • 从没有互联网的桌面快捷方式运行时,大多数都能正常运行 .

发生什么事情是无计划的:

  • 当互联网断开连接时,如果从.jnlp文件运行,应用程序根本不起作用 . 控制台指示代码库不可用 . 据我说它应该从缓存中检测到互联网和工作的丢失,但事实并非如此 .

  • 当离线运行(通过带有-offline参数的固有运行.jnlp文件的快捷方式)至少一次,并且互联网再次连接并重新启动时,Web start要求用户确认软件现在需要联机 . 如果用户拒绝,则消息指示缺少所需文件 . 除非重新运行互联网并表明它可能会上线,否则程序现在将永远不会重新开始 . 然后重新下载具有所有依赖项的整个应用程序 .

  • 即使在离线状态下,有时也会发生同样的情况 . 脱机快捷方式只运行一次并运行软件,然后控制台指示某些jar已失效 . 重新启动时会出现与上述相同的问题 .

  • 如果是第一次运行并且软件已安装并启动,并且互联网在此之后很快断开连接,并重新启动 . 软件将无法脱机工作,表示并未下载所有资源 . 看到所有的 jar 都设置为热切下载并检查更新被设置为“超时”,我认为没有理由这样做 .

更奇怪的是,Linux和Windows之间的行为似乎存在差异 . 虽然不完美,但在Linux上似乎更加一致,离线快捷方式永远不会检查更新 . 虽然在Windows上有时需要重新下载然后更新 .

如果当前部署不是这种不可预测的,那么当前的逻辑似乎就是在所有用户需要更新应用程序以从.jnlp文件而不是从快捷方式运行软件 .

无论如何,除了长篇描述之外,任何人都可以在我的.jnlp文件中找到错误,如下所示?我真正想要的是在线和离线工作的快捷方式,在线时检查更新,但在没有对 jar 进行任何更改时不丢失应用程序的缓存版本 - 而不是不必要地重新下载软件 .

<?xml version="1.0" encoding="utf-8"?>
<!-- JNLP File for example-->
<jnlp 
    spec="7.0+"  codebase="http://www.example.co.za/downloads/example"
    xmlns:jfx="http://javafx.com" 
    href="Example.jnlp">
    <information>
            <title>Example</title>
            <vendor>My Company</vendor>
        <homepage href="http://www.example.co.za/products" />
            <description>Example is an example application</description>
        <icon href="../shared/example_icon.png"/> 
            <icon kind="splash" href="../shared/example_splash.png" />
        <icon kind="shortcut" href="../shared/example_icon.png" />
        <shortcut online="false" install="true"> 
            <desktop/>
            <menu submenu="My Company"/>
        </shortcut>     
    <offline-allowed/>  </information> <security>  <all-permissions/> </security> <resources>
    <jfx:javafx-runtime version="8.0+" href="http://javadl.sun.com/webapps/download/GetFile/javafx-latest/windows-i586/javafx2.jnlp"/>
  </resources>
    <update check="timeout" policy="prompt-update"/>
  <resources>
    <j2se version="1.8+" java-vm-args="-Xms512m"/>
    <jar href="Example.jar" download="eager"/>
    <jar href="Dependency-1.jar" download="eager"/>
    <jar href="Dependency-2.jar" download="eager"/>
    <jar href="Dependency-3.jar" download="eager"/>
    ...

  </resources> 
<application-desc main-class="ExampleMain">
    <applet-desc  width="1024" height="768" main-class="com.javafx.main.NoJavaFXFallback"  name="Example Application" >
            <param name="requiredFXVersion" value="8.0+"/>
    </applet-desc>
    <jfx:javafx-desc  width="1024" height="768" main-class="ExampleMain"  name="Example Application" />     
<application-desc/>

</jnlp>

2 回答

  • 0

    <application-desc/> 应为 </application-desc>

  • 1

    webstart确实存在许多问题和意外行为 . 我有一些webstart应用程序,在部署它们时,我意识到最好将更新选项保留为默认值以避免出现问题 . 看起来你唯一不同于我的jnlp的是你请求更新提示,而我让它自动更新 . 尝试删除标记,让它使用默认值,看看是否能解决问题或至少改进它 .

    如果您愿意,可以尝试我的webstart jnlp,看看我的jnlp版本是否在您的计算机中表现良好:

    http://www.runiter.com/graphing-calculator/online.htm

    还有一件事:当你在没有互联网连接时双击jnlp它没有运行程序的事实是正常的 . 当你运行jnlp它需要互联网 . 只有快捷方式才能在脱机模式下运行 .

相关问题