我需要更新我的申请。为此,我删除了我的程序当前运行的.jar文件并创建一个具有相同名称的新文件,然后重新启动应用程序。
然而,当我尝试这样做时,我得到java.io.IOException: Access is denied
。
我该如何解决这个问题?
谢谢!
答案 0 :(得分:3)
问题是,jar
文件已被JVM使用(特别是类加载器)。即使在Java 7中,当不再需要jar文件时,类文件也会被类加载器关闭,因此不能保证底层资源将被释放,或者更具体地说,它们将被释放。
有关更多信息,请查看Closing a URLClassLoader
你有几个选择。
将更新过程与应用程序分开(因此它是一个独立的程序)并使用无父执行过程来更新应用程序。这涉及到执行你的程序,它允许当前进程在新进程之前终止,在windows下这可以通过使用类似的东西来实现...
cmd /c start /b /normal "" {command line to be executed}
在Linux下我相信你可以使用nohup
,但我没有经验。
(不要忘记使用System.exit
来终止当前流程;))
您可以使用Java Web Start来提供自己的更新功能