我有一个相当大的java程序,我们想让它使用户可以退出应用程序并以另一个用户身份登录。要做到这一点,我们想关闭应用程序并重新启动它,以便向用户显示登录对话框。问题是,该应用程序相当大,写得不好。它有很多静态变量可以保存某种状态信息。理想情况下,我想重写应用程序以处理这些可以全部清除的情况,但实际上我们需要尽快提供此功能。如何从java内重新启动java程序?
我在想什么最简单的就是停下应用程序并开始一个新的虚拟机。然而,在关闭当前应用程序的同时停止并应用并启动相同的应用程序似乎令人惊讶地困难。有没有人有这样的经验?
编辑:我们正在追求使用Runtime.exec来再次调用同一个应用程序,但exec()想阻止,所以我们必须跳过箍环让它在每个平台(Windows,Mac,Linux)上工作。我更喜欢独立于平台的方式。
可能重复[重新启动Java应用程序。](http://stackoverflow.com/questions/4159802/restart-a-java-application) – 2011-01-10 18:01:20
该问题有一个答案使用`ProcessBuilder`,这是建议在`Runtime.exex(cmdarray,envp,dir)`的文档。 “ProcessBuilder.start()现在是使用修改后的环境启动进程的首选方式。” – 2011-01-10 18:13:45
这应该是“Runtime.exec(...)”(不是“exex”)。 – 2011-01-15 01:30:59