2015-06-19 23 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上的我。

但是,如果它不能覆盖你,那么从你的代码中,你可能使用了一些资源,它必须保持锁定(我不确定是什么,这只是我的猜测)。