12

我正在尝试找出一种将自我更新功能添加到我正在开发的 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 版本中遇到的常见错误做太多事情。

4

6 回答 6

6

我做了同样的事情。但那是很久以前的事了,所以今天可能有更好的工具。

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

希望这可以帮助。

于 2008-10-16T06:30:25.523 回答
4

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

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

于 2008-10-16T06:55:01.403 回答
4

更新、插件、关注点分离等正是OSGi的意义所在——你可能想看看这个。它不会免费(阅读:初始学习曲线陡峭,特别是当您当前使用类加载技巧时)至少有很好的开源实现(felix - 请参阅felix.apache.org,Equinox - 请参阅www.eclipse。组织和其他)

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

于 2008-10-16T18:04:11.210 回答
1

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

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

于 2008-10-16T09:05:56.163 回答
1

我肯定会首先尝试 Webstart。即使是使用 Webstart 的早期 Eclipse RCP 应用程序,我们也已经取得了很大的成功,而且您可能找不到比使用 OSGI 框架 (Eclipse Equinox) 更时髦的类加载问题了。

您能否在有关类加载方法的问题中提供更多详细信息?

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

于 2008-10-16T11:45:17.700 回答
1

The Java Web Start is good choice. The GC stuff is not important. Classloading could be problem. But when you got trusted by user you can grant AllPermisions and you will be able to do custom classloading. Maybe it will be good to reconsider funky stuff with classloading. It is really necessary? Or look at NetBeans. There should be found inspiration for auto-update.

于 2008-10-16T20:46:00.370 回答