我有一些應用程序,它具有更新自身的能力。它從網上下載jar文件,然後嘗試用下載的jar文件替換用過的jar來運行該應用程序。 但我不能這樣做,因爲該文件被Windows鎖定,因爲應用程序仍在運行。如何刪除由java中的窗口使用/鎖定的文件
有人知道一些解決方法嗎?
我有一些應用程序,它具有更新自身的能力。它從網上下載jar文件,然後嘗試用下載的jar文件替換用過的jar來運行該應用程序。 但我不能這樣做,因爲該文件被Windows鎖定,因爲應用程序仍在運行。如何刪除由java中的窗口使用/鎖定的文件
有人知道一些解決方法嗎?
這方面一個流行的解決方案是在運行更新爲後單獨的程序。你有沒有注意到Firefox在更新時必須重啓?那是因爲一個單獨的進程(updater.exe)正在更新文件,然後再次啓動Firefox。
您可以嘗試這種方法。我看到的唯一障礙是試圖自動化MAIN程序來關閉自己。唯一可行的方法就是讓主應用程序通過本地套接字等待kill信號,並且updater可以通過本地網絡發送命令。還有一件事你必須考慮的是更新器必須在單獨的java進程中運行。如果您的主程序只是創建一個新的Updater對象,則更新程序將與主程序的JVM共存,從而使您回到原來的狀態。
我認爲這裏要做的正確的事情是重啓的應用程序。事件,如果你能在運行更新JAR,所有類型的錯誤可能會發生,因爲類的版本,不同的階層,不同的實現等
這樣做的典型方法是編寫一個單獨的更新程序,它將在主程序看到更新時調用它。此時,您的主程序可以在新進程中啓動更新程序並退出。您更新可以等待主程序退出,下載並複製更新的文件,並重新啓動您的主程序
這是一個問題OSGi已經解決了。
真正的問題是不加載新的jar版本。這可以通過你自己的類加載器來完成,釋放文件鎖定。真正的問題是如何handle instances of different versions of the same class。
重新啓動會省略這些問題。如果你真的需要在一個應用程序中使用不同的jar版本,使用OSGi。