我正在编写GUI应用程序,我想执行应用程序的重新启动,以防用户做了一些更改。
目前,我对初始化gui的方法startGui进行了一次主调用。我想知道如何使用现有JVM中的新JVM再次调用此方法。
发布于 2011-09-01 18:42:02
我不认为你可以在虚拟机中做到这一点。相反,您可能需要一个dispatcher进程(它可以是一个shell脚本,也可以是任何其他进程,包括Java进程)。
无论如何,您需要结束当前进程(使用System.exit(someCode)),让dispatcher分析返回代码,并针对给定的返回代码重新启动此应用程序。
发布于 2011-09-01 20:28:42
以下是我在当前项目中如何做到这一点。它保留进程参数、JVM参数和类路径。
private static void restart(String[] args) throws IOException {
RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean();
List<String> jvmArgs = mx.getInputArguments();
String cp = mx.getClassPath();
List<String> listArgs = new ArrayList<String>();
listArgs.add("java");
listArgs.addAll(jvmArgs);
listArgs.add("-cp");
listArgs.add(cp);
listArgs.add(Main.class.getName());
listArgs.addAll(Arrays.asList(args));
String[] res = new String[listArgs.size()];
Runtime.getRuntime().exec(listArgs.toArray(res));
System.exit(0);
}请注意,args是main方法接收的参数。它必须在某个地方被记住。
https://stackoverflow.com/questions/7268824
复制相似问题