如何在发生更新时重新启动应用程序?
创建一个进程,该进程将使用java启动新的application.invoke java -jar yourApp.jar
并停止当前的应用程序。
创建批处理文件myBat.bat
PING 1.1.1.1 -n 1 -w 30000 >NUL // wait for your application to stop 3000 milsec
java -jar yourApp.jar
之前system.exit(0)
呼叫
Runtime.getRuntime().exec(myBat.bat); // give proper path
这将在JVM之外执行 – 2011-04-15 06:45:07
@piyush它必须是,因为你的jvm将执行'System.exit(0)' – 2011-04-15 06:53:07
公平的,通常我不喜欢在JVM之外执行某些东西。 – 2011-04-15 06:57:31
除了Jigar的解决方案,您可能要委托其他参数重新启动的应用程序,例如VM选项,程序参数或应用程序的基本目录。您可以将此存根扩展为您的需求:
private static void restartApplication() throws IOException {
List<String> arguments = ManagementFactory.getRuntimeMXBean().getInputArguments();
List<String> fullRestart = new ArrayList<String>();
fullRestart.add(System.getProperty("java.home")+"/bin/java");
fullRestart.addAll(arguments);
fullRestart.add("-cp");
fullRestart.add(System.getProperty("java.class.path"));
// Assuming that 'Application' contains the main method:
fullRestart.add(Application.class.getName());
ProcessBuilder pb = new ProcessBuilder(fullRestart);
pb.directory(new File(".").getParentFile());
System.out.println("Starting app - arguments: " + fullRestart);
pb.start();
System.exit(0);
}
但是不要直接在main-method内调用它,即使是为了测试的目的 - 它会无限重启自己...... – sschwieb 2011-04-15 07:28:32
是在应用程序本身或单独的应用程序中重新启动应用程序的按钮? – MeBigFatGuy 2011-04-15 06:34:13