2015-06-19 45 views
1

我有一個內置自動更新器的jar客戶端,當你打開它時,如果有新版本,它會下載它。我做到了,所以它將新版本下載到用戶正在運行當前目錄的同一目錄中,以便最終用戶很容易。在使用時覆蓋jar - Java

問題在於它不能覆蓋自身,因爲它明顯在使用中。截至目前,它下載一個新版本,我有名稱中的版本,所以它下載了一個新的版本,如v1.1或v1.2中的jar名稱。

這工作,但似乎在我看來凌亂,有沒有人知道的一種方法,使我可以總是有相同的文件名? IE沒有人知道覆蓋正在使用的文件的方法,或者解決方法是關閉當前並替換,然後重新打開新文件?

這裏是我的下載類 - http://pastebin.com/KJdDndhh

回答

1

我認爲解決這個問題的最佳解決方案是沒有1個Jar文件都自己管理爲應用程序和更新。有一個單獨的Jar用於更新,而您當前的單獨用作應用程序。

這似乎與具有自動更新功能的應用程序的數量相似。傳奇的

聯賽已經運行的主要應用程序啓動

殺毒軟件通常加載自己的簽名文件到內存中,並關閉他們的對他們連接,使他們能夠覆蓋這些文件之前單獨更新。

0

當JRE執行JAR文件時,它會加載它所需的類,然後釋放JAR文件。因此,即使使用JAR文件中的代碼,您也可以覆蓋JAR文件。

我已經實現了相同的更新機制,它適用於Windows 7,Ubuntu和Mac OS上的我。

但是,如果它不能覆蓋你,那麼從你的代碼中,你可能使用了一些資源,它必須保持鎖定(我不確定是什麼,這只是我的猜測)。