首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从现有JVM调用新的JVM

从现有JVM调用新的JVM
EN

Stack Overflow用户
提问于 2011-09-01 18:05:51
回答 2查看 1.4K关注 0票数 0

我正在编写GUI应用程序,我想执行应用程序的重新启动,以防用户做了一些更改。

目前,我对初始化gui的方法startGui进行了一次主调用。我想知道如何使用现有JVM中的新JVM再次调用此方法。

EN

回答 2

Stack Overflow用户

发布于 2011-09-01 18:42:02

我不认为你可以在虚拟机中做到这一点。相反,您可能需要一个dispatcher进程(它可以是一个shell脚本,也可以是任何其他进程,包括Java进程)。

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

票数 0
EN

Stack Overflow用户

发布于 2011-09-01 20:28:42

以下是我在当前项目中如何做到这一点。它保留进程参数、JVM参数和类路径。

代码语言:javascript
复制
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方法接收的参数。它必须在某个地方被记住。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7268824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档