从现有JVM调用新JVM

时间:2011-09-01 10:05:51

标签: java

我正在编写GUI应用程序,我希望在用户进行一些更改时重新启动应用程序。

Currenty我曾经使用方法startGui进行主调用,初始化了gui。 我想知道如何再次调用此方法,但是使用现有JVM中的新JVM。

2 个答案:

答案 0 :(得分:0)

我认为你不能从VM中做到这一点。相反,您可能需要一个调度程序进程(它可能是一个shell脚本,但也可能是任何其他进程,包括Java进程)。

无论如何,您需要结束当前进程(使用System.exit(someCode)),让您的调度程序分析返回代码并让它重新启动此应用程序以获取给定的返回代码。

答案 1 :(得分:0)

以下是我在当前项目中的表现方式。它保留了进程参数,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);
}

请注意argsmain方法收到的参数。它必须在某处记忆。