2008-10-16 72 views
12

我想找出一種方法來將自我更新功能添加到我正在處理的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通常會出現的錯誤做得太多。

回答

6

我做了完全一樣的事情。但那已經很久了,所以今天可能有更好的工具。

我發現我需要的是一個裝載機。加載器主程序在classpath中沒有應用程序罐。它首先根據需要下載更新,然後使用類路徑中的應用程序罐創建自定義類加載器,並調用應用程序主類的主要方法。這不是很複雜。 IIRC我需要這樣做,因爲如果jar包已經在classpath中,那麼它們不能被覆蓋在窗口中。

希望這會有所幫助。

+0

這似乎是最簡單的方法。我在服務器上保存了一個XML文件,並在本地列出了所有要更新的文件的副本以及版本號。快速簡單,但訣竅。 – madlep 2008-10-18 01:03:28

4

我們在6年前有過自我更新的鞦韆應用。像你建議的那樣,

1)它通過http下載最新的jar,
2)將它們複製到一個文件夾中。
3)由於swing應用程序是使用.BAT文件啓動的,因此在用戶說YES後,我們將關閉swing應用程序並查找更新文件夾中的任何文件。如果是,請啓動另一個.BAT文件以將新JAR複製到所需的目錄。
4)然後重新啓動搖擺應用程序。

1

我肯定會先試試Webstart。我們已經使用Webstart成功發佈了早期的Eclipse RCP應用程序,並且與OSGI框架(Eclipse Equinox)相比,您可能無法獲得更多時髦的類加載問題。

請問您是否可以在您關於分類加載方法的問題中提供一些更詳細的信息?

關於GC和其他VM設置:這些在Webstart用於啓動應用程序的JNLP(Java網絡啓動協議)文件中很容易指定。

+0

你可以給一個RCP應用程序的鏈接? – Liam 2008-10-16 11:58:59

4

更新,插件,關注點分離等正是OSGi的意義所在 - 您可能想看看這個。(:當您正在使用的類加載技巧與陡峭的最初的學習曲線,尤其是閱讀)至少有好的開源實現(菲利克斯 - 見felix.apache.org,秋分 - 見www.eclipse.org等)

它不會是免費對於這些實現,autoupdaters可用 - 如果您正確編寫模塊,則可以在運行時進行更新而無需重新啓動。

1

Java Web Start是不錯的選擇。 GC的東西並不重要。類加載可能是問題。但是,當您獲得用戶的信任時,您可以授予AllPermisions,並且您將可以執行自定義類加載。也許用類加載重新考慮時髦的東西會很好。這真的有必要嗎?或者看看NetBeans。應該爲自動更新找到靈感。

相關問題