Java控制台重启

时间:2013-07-04 01:13:09

标签: java console-application

如何重新启动Java控制台应用程序。

我想创建一个方法,在调用它时重启或重新启动控制台应用程序。你们能告诉我一些想法吗?

3 个答案:

答案 0 :(得分:2)

我想不出用Java做的方法,你需要一些脚本帮助。您可以通过使用System.exit()完成JVM执行并使用调用程序的特殊值来重新启动,以了解是否需要重新启动而不是完成。所以在你的Java代码中你会有这样的东西:

public class Test {

    public static final int RESTART_CODE = 100;

    public static void main(String ... args) throws IOException {

        // DO something...

        restart();
    }

    static void restart() {
        System.exit(RESTART_CODE);
    }
}

然后一个脚本调用JVM(在这种情况下是一个Linux bash脚本,如果你使用的是Windows,你可以用* .bat文件做类似的事情)。 Tee脚本:

#!/bin/bash

java Test "$@"
[ $? == 100 ] && ./test.sh "$@"

那么您可以使用

调用您的程序
java.sh _argument1_ _argument2_ ...

答案 1 :(得分:2)

您是否尝试过调用main(args)传递String[] args

如果你真的想要restart()方法,你可以做一些像

这样的事情
private void restart(String[] strArr)
{
    main(strArr);
}

粗略的迷你示例

import java.io.*;
public class Test{

   public static void main(String[] args)
   {
        try{
            System.out.println("Type 'R' to restart");
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String input = br.readLine();
            if(input.equals("R"))
                restart(args);
            else
                System.out.println("You did not restart");
        }
        catch(Exception e)
            {e.printStackTrace();}

    }

    private static void restart(String[] strArr)
    {
        System.out.println("You restarted");
        main(strArr);
    }

}

答案 2 :(得分:0)

理论上,您应该能够调用Runtime.exec()并传入命令来运行Java控制台应用程序。

为了预防,在调用Runtime.exec()之前,您应该保存所有数据或达到应用程序准备退出的状态。 由于Runtime.exec()将执行另一个控制台应用程序实例,新实例可能已加载所有数据。

成功调用Runtime.exec()后,现有的应用程序可以安静地消失。

让我知道是否可以这样做,因为我关心的是当现有应用程序退出时是否会终止新实例。