为Java Swing应用程序添加自更新功能的最佳方法是什么?

时间:2008-10-16 05:49:23

标签: java swing

我正在试图找到一种方法来为我正在处理的Java / Swing应用程序添加自我更新功能。

基本上我有一堆带有额外功能的jar文件,可以在安装的用户更改时重新部署。没有什么复杂的,只需检查是否已发布新版本,通过HTTP下载它们,然后可选择提供给用户重启应用程序。

我看了一下webstart,它可以工作。但这个特殊的应用程序做了一些时髦的东西,类加载和GC内存设置看起来不像是通过webstart支持,或至少会使问题复杂化。 (这是JMeter的调整版本)

我也加入了这个插件处理程序http://swing-fx.blogspot.com/2008/06/add-auto-update-and-plugins-to-your.html的道路,但它是非常alpha的,并试图用你通常使用alpha版本的bug做太多。

6 个答案:

答案 0 :(得分:6)

我做了完全相同的事情。但这很久以前,所以今天可能有更好的工具。

我发现我需要的是装载机。加载器主程序在类路径中没有app jar。它首先根据需要下载了更新,然后在类路径中使用app jars创建了一个自定义类加载器,并调用了应用程序主类的main方法。这不是很复杂。 IIRC我需要这样做,因为如果它们已经在类路径中,则不能在窗口中覆盖jar。

希望这会有所帮助。

答案 1 :(得分:4)

6年前,我们有一个自我更新的摇摆应用程序。像你建议的那样,

1)它通过http下载最新的罐子,
2)将它们复制到一个文件夹中。
3)由于使用.BAT文件启动swing应用程序,在用户说YES后,我们将关闭swing应用程序并查找更新文件夹中的任何文件。如果是,则启动另一个.BAT文件以将新JAR复制到所需目录。
4)然后重新启动swing应用程序。

答案 2 :(得分:4)

更新,插件,关注点分离等正是OSGi的含义 - 您可能想看看这个。它不会自由(阅读:初始学习曲线陡峭,特别是当你正在使用类加载技巧时)至少有很好的开源实现(felix - 见felix.apache.org,equinox - 见{{3}和其他人)

对于这些实现,autoupdater可用 - 如果正确编写模块,则可以在运行时更新而无需重新启动。

答案 3 :(得分:1)

我相信您应该再次关注Java WebStart,或者至少详细说明您认为会导致问题的“时髦的类加载”(因为它可能会导致此处提出的任何解决方案出现问题)。

IIRC,您可以使用Java WebStart(http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/syntax.html#resources)设置命令行参数。

答案 4 :(得分:1)

我肯定会先试用Webstart。即使是使用Webstart的早期Eclipse RCP应用程序,我们已经取得了很多成功,并且您可能无法获得比OSGI框架(Eclipse Equinox)更加时髦的类加载问题。

您是否可以在关于类加载方法的问题中提供更多详细信息?

关于GC和其他VM设置:这些很容易在Webstart用于启动应用程序的JNLP(Java网络启动协议)文件中指定。

答案 5 :(得分:1)

Java Web Start是不错的选择。 GC的东西并不重要。类加载可能是个问题。但是当您受到用户信任时,您可以授予AllPermisions,您将能够进行自定义类加载。也许用类加载来重新考虑时髦的东西会很好。这真的有必要吗?或者看看NetBeans。应该找到自动更新的灵感。

相关问题