当前位置: 首页 > 知识库问答 >
问题:

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

公西星文
2023-03-14

当我试图通过Java Web Start部署JavaFX桌面应用程序时,特别是当它决定下载JAR时,我得到了不一致的行为。我的代码签名了。

所需要的:

>

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

    如果发现更新,询问用户是否要下载。如果是,更新并运行。如果没有,则运行缓存版本。

    桌面图标需要制作。

    目前正在计划发生的事情:

    • 在首次运行时,web start将下载并完美地验证应用程序。
    • 将创建快捷方式,并在Windows中显示在可卸载的软件下。
    • 当从.jnlp文件运行并且连接了internet时,工作正常。
    • 从带有internet的桌面(从未断开连接)运行时,工作正常。
    • 在没有互联网的情况下从桌面快捷方式运行时,大多工作得很好。

    发生的事情是计划外的:

    >

  • 当internet断开时,如果从.jnlp文件运行,应用程序根本无法工作。控制台指示代码库不可用。根据我的说法,它应该检测互联网的丢失,并从缓存中工作,但它没有。

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

    即使在离线时,有时也会发生同样的情况。脱机快捷方式工作一次并运行软件,控制台然后指示一些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>
    
  • 共有1个答案

    巫马浩言
    2023-03-14

    应为

     类似资料:
    • 问题内容: 我创建了一个Java桌面应用程序(使用Swing),现在尝试通过使用JNLP从网络启动它使其工作。当我从终端启动应用程序时,它运行良好,但是一旦从JNLP启动它,它就不会关闭。我必须每次都手动终止该进程。 我读到如果将其用作默认关闭操作可能会出现问题,但事实并非如此。它使用(隐式)。另外,释放所有对象后,我将显式调用: 我猜想在关闭应用程序时可能会引发异常,但是我找不到从JNLP开始获

    • 我正在开发一个使用网络摄像头的JavaFX应用程序。为了能够访问camera,我被迫使用opencv库和javacv(使用本机opencv共享库)。现在,我希望本机DLL以某种方式安装在用户机器上,以便java可以使用它们。我阅读了整个ant tasks reference for javafx并找到了一个示例,它解释了如何将本机系统库添加到应用程序包中以使其工作。我正在使用netbeans构建j

    • 解决办法是: 使用路径/somefxml.fxml。 使用FXMLLoader.Load(getClass().GetClassLoader().GetResource(“SomeFXml.fxml”)); 使用FXMLLoader.Load(getClass().GetClassLoader().GetResource(“packageName/somefxml.fxml”)); 检查文件是否存

    • 问题内容: 我有一个非常大的程序,当前正在使用SWT。该程序可以在Windows,Mac和Linux上运行,它是一个包含许多元素的大型桌面应用程序。现在SWT有点老了,我想切换到Swing或JavaFX。我想听听您对三件事的想法。 我主要关心的是桌面GUI应用程序会更好吗?(我在网上看过,很多人认为JavaFX与Swing一样好,但是除了简单的见解大战之外,我没有看到很多有效的论点)。它必须在Wi

    • 问题内容: 直到最近,我还能够使用 Java web start 在 Firefox中 启动/打开 JNLP 文件。 不知道发生了什么事,突然突然启动了 JNLP 文件,出现了启动屏幕,显示 Java正在启动… ,然后什么也没有发生。甚至浏览器和 javacpl.cpl 小程序中的 Java控制台 也不会打开。 __ 尝试了所有可能性:删除了所有较旧的版本并安装了最新的JRE(Java版本“ 1.

    • 处理命令时发生未知的服务器端错误。原始错误:无法使用默认证书签名。原始错误生成ENOTDIR 我正在尝试使用Appium桌面应用程序启动一个android应用程序。Appium服务器显示以下错误日志;