我的jar客户端内置了自动更新程序,当你打开它时,如果有新版本,它会下载它。我这样做是为了将新版本下载到用户运行当前目录的同一目录中,以便最终用户使用。
问题在于它无法覆盖自身,因为它显然在使用中。截至目前,它下载了一个新版本,我在名称中有版本,因此它会在jar名称中下载一个类似v1.1或v1.2的新版本。
这有效但在我看来似乎很乱,有没有人知道如何制作它所以我可以总是拥有相同的文件名? IE有没有人知道一种覆盖正在使用的文件的方法,或者解决当前关闭当前并替换然后重新打开新文件的方法?
这是我的下载程序类 - http://pastebin.com/KJdDndhh
答案 0 :(得分:1)
我认为这个问题的最佳解决方案是没有1个Jar文件将自己管理为应用程序和更新程序。有一个单独的Jar用于更新,而您当前的Jar仅作为应用程序。
这似乎与有多少自动更新应用程序有效。
League of Legends有一个单独的更新程序,在主应用程序启动之前运行
防病毒软件通常会将其签名文件加载到内存中并关闭它们与它们的连接,从而允许它们覆盖这些文件。
答案 1 :(得分:0)
当JRE执行JAR文件时,它会加载所需的类,然后释放JAR文件。因此,您甚至可以从JAR文件中的代码覆盖JAR文件。
我已经实现了相同的更新机制,它适用于Windows 7,Ubuntu和Mac OS。
但如果它无法覆盖你,那么从你的代码中你可能会耗尽一些资源来保持锁定(我不确定是什么,它只是我的猜测。)