当前位置: 首页 > 面试题库 >

Java Swing桌面应用程序中的自动更新功能

常博裕
2023-03-14
问题内容

我已经开发了一个桌面Swing应用程序,并且正在考虑提供自动更新功能的最佳方法。我知道JavaWebStart提供了此功能,但我认为它不适合我的需求,因为我需要读取本地文件,因此需要对jar进行签名。此外,JWS需要额外的工作才能在服务器中部署,而现在我只需要上传.jar。

我一直在考虑这种方法:

  • 第一个JAR(不需要更新)将加载初始屏幕,在config.xml中检查当前版本,并将其与服务器config.xml进行比较。

  • 如果服务器版本较新,请询问用户是否要更新。在这种情况下,下载新的“ main.jar”,新的“ config.xml”和新的启动/图标,检查MD5SUM,然后用新文件替换旧文件。

  • 启动“ main.jar”。

我不知道是否要重新发明轮子,或者是否有比我上面提到的模式更好的模式。


问题答案:

我们做了类似的事情。我们只是通过https获取并下载了jar。要知道您是否需要一个新的,我们只需检查流的大小即可。从理论上讲,这可能不起作用,但实际上它确实起作用。我们甚至得到了罐子所在的目录清单,对其进行了解析并下载了每个罐子,因此更加奇特,因此罐子的名称也不是硬编码的。不过,有几点丑陋之处。

首先是启动一个新的jvm进程来启动新的jar,这不是那么简单。

其次,如果更新在中间失败,则必须确保您不会破坏jar。

最后,无法使用此过程来更新引导jar。



 类似资料:
  • 在学习这本书的过程中,你已经掌握了很多关于 Git 的命令。虽然这些是在学习过程中不可缺少的,但是版本控制的核心并不是让你学习所有的命令和参数。 当你掌握一些基本的概念,再加上一个带有用户图形界面的应用程序的帮助,就可以让你的日常工作变得更加简单。一个最大的好处就是它会为你提供了一个可视化的用户操作界面。 在桌面应用程序中,很多任务使用起来会更加容易和更方便。并且你也不需要记住那几十个繁琐的 Gi

  • 我发现用Swing编写好的OO代码非常困难。我的问题本质上是我有一个带有动作侦听器的视图(J面板)。动作侦听器找出单击了哪个按钮,并调用适当的控制器方法。问题是这个控制器方法需要更新另一个视图。所以我遇到的问题是我有视图被到处传递给控制器。这里有一个例子。 这本质上是我想要的,但这是最终发生的事情。 您可以看到,随着需要更新的视图数量的增加以及类似于此的类数量的增加,视图本质上是全局变量,代码变得

  • 问题内容: 我的公司正在改造IT基础架构和系统,因此我们正在最终确定用于开发新系统的技术。 我们有两名候选人;Java和Python。 选择的主要标准是语言必须完整。从某种意义上说,它必须能够用于Web和桌面应用程序开发。Java被证明是这一领域,具有许多优秀的Web框架(JSF,Hibernate等)和相对优秀的GUI库(SWT,Swing)。 但是,从我个人的经验来看,Python看起来更美味

  • 问题内容: 启动器在游戏中最常见。想想英雄联盟,星际争霸II或几乎所有的MMO。在开始实际游戏之前,您有一个小型启动器应用程序,负责更新和修补。 我想通过我正在开发的特定非游戏应用程序来朝这个方向发展。启动器的概念非常有意义:它检查更新,替换适当的二进制文件/库,运行完整性检查并启动应用程序。但是,启动器如何自我更新?这往往是罕见的事件,但是如何完成呢?启动程序实际上是否只是覆盖当前正在运行的二进

  • 我即将编写一个新的跨平台应用程序,我选择JavaFX,主要是因为它丰富的UI库(包括标准的和第三方的)和它本机的数据绑定特性。我的应用程序将通过原生打包来部署,这既是因为缺乏PPAPI Java插件(Chrome将在Chrome42中停止NPAPI,现在处于测试阶段),这将阻止使用Chrome的用户使用WebStart,也是因为更“经典”的用户体验,所以WebStart和自动更新是不可能的。 情况

  • 作者:陈希章 发表于 2017年3月22日 桌面应用程序,在我这篇文章的语境中,我是特指在Windows桌面上面直接运行的.NET应用程序,包括Console Application,WPF Application,Windows Forms Application, UWP Application,并且限于篇幅,我只会以Console Application作为演示,因为无论表现形式如何不同,它