2

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

我想创建一个方法,当它被调用时它会重新启动或重新启动控制台应用程序。你们能给我一些想法我该怎么做吗?

4

3 回答 3

3

您是否尝试过调用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);
    }

}
于 2013-07-04T01:56:40.997 回答
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 文件执行类似的操作)。三通脚本:

#!/bin/bash

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

然后你可以调用你的程序

java.sh _argument1_ _argument2_ ...
于 2013-07-04T01:17:21.550 回答
0

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

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

成功调用 Runtime.exec() 后,现有应用程序可以平静地死掉。

让我知道这是否可以做到,因为我担心在现有应用程序退出时新实例是否会被终止。

于 2013-07-04T05:01:21.693 回答