2015-02-12 55 views
3

当通过Java Web Start尝试部署我的JavaFX桌面应用程序时,特别是在决定下载罐子时,出现不一致的行为。 我的代码已签名。JavaFX桌面应用程序通过web开始(jnlp) - 不一致的行为

需要什么样的:

  • 桌面应用程序,100%离线工作,但检查更新时,有一个互联网连接。

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

  • 需要制作桌面图标。

目前发生什么是计划:

  • 在第一次运行时,网站开始下载和验证完美应用。
  • 创建快捷方式并在Windows中显示可卸载的软件。
  • 从.jnlp文件和互联网连接运行时,完美工作。
  • 从桌面与互联网(从未断开连接)运行时,工作完美。
  • 当从没有互联网的桌面快捷方式运行时,大多完美地工作。

发生了什么是意外的:

  • 当网络断开时,应用程序不会在所有的工作,如果从.jnlp文件运行。控制台指示代码库不可用。据我所知,它应该检测到互联网和缓存工作的损失,但事实并非如此。

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

  • 即使在离线状态下,也会发生同样的情况。离线快捷方式一次运行并运行软件,然后控制台显示一些瓶子已经失效。如果重新启动,则会出现与上述相同的问题。

  • 如果第一次运行,软件安装并启动,并且在此之后迅速断开网络并重新启动。软件不能脱机工作,表明并非所有资源都已下载。鉴于所有的罐子都被设置为热切下载并且检查更新被设置为“超时”,我认为没有理由这样做。

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

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

无论如何,除了长描述,任何人都可以在我的.jnlp文件中发现错误,下面给出?我真正想要的是在线和离线工作的快捷方式,在线时检查更新,但不会丢失应用程序的缓存版本,而不会不必要地重新下载软件。

<?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> 
+0

IDE和编译器是IntelliJ IDEA。权限,主类和应用程序名称也包含在jar清单文件中。 – 2015-02-12 07:33:48

回答

0

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

如果你喜欢,你可以试试我在webstart JNLP,看看我的JNLP版本在您的计算机表现良好:

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

一两件事:一个事实,即它并没有在程序运行时你双击jnlp没有互联网连接是正常的。当你运行jnlp时,它需要互联网。只有快捷方式才能在离线模式下运行。

+0

图形计算器似乎更长时间通过Webstart部署,因此没有JNLP。 – 2017-06-30 03:58:30

+0

是的,我们决定选择可下载的exe,因为webstart解决方案不可靠。如果您想看到我们的旧webstart配置的代码,它仍然可以在此访问(尽管其签名已过期):http://www.runiter.com/webstart/gc3/grapher.jnlp – 2017-06-30 19:27:30

1

<application-desc/>应该是</application-desc>

相关问题