【问题标题】:How to restart an application if any update occurs?如果发生任何更新,如何重新启动应用程序?
【发布时间】:2011-04-15 06:29:29
【问题描述】:

我的要求是重新启动应用程序。

我有一个用户界面按钮。当我点击它时,它应该停止当前正在运行的应用程序并应该启动同一个应用程序。

使用的语言是java。

【问题讨论】:

  • 是应用本身的重启按钮,还是在单独的应用中?

标签: java application-restart


【解决方案1】:

创建一个将启动新应用程序的进程。使用 java 调用 java -jar yourApp.jar 并停止当前应用程序。

【讨论】:

    【解决方案2】:

    除了 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);
    }
    

    【讨论】:

    • 但不要在主方法中直接调用它,即使是为了测试目的 - 它会无限重启...
    【解决方案3】:

    创建批处理文件 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 之外执行
    • @piyush 必须是,因为你的 jvm 将执行 System.exit(0)
    • 很公平,一般来说我不喜欢在 JVM 之外执行一些东西。
    • 你别无选择,是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    相关资源
    最近更新 更多