使用Java在命令行中执行多个命令

使用Java在命令行中执行多个命令,java,macos,terminal,communication,reader,Java,Macos,Terminal,Communication,Reader,我正在用Java编写一个国际象棋程序。为了计算最佳的移动(当一个人与计算机比赛时),我使用了UCI(通用国际象棋界面)。这是一个终端应用程序(我使用的是MacOSX)。使用Java,我想执行一些命令以获得最佳的移动效果。这就是我目前的情况: String[] commands = {"/Users/dejoridavid/Desktop/stockfish-6-64", "isready", "uci"}; Process process = null; try { process =

我正在用Java编写一个国际象棋程序。为了计算最佳的移动(当一个人与计算机比赛时),我使用了UCI(通用国际象棋界面)。这是一个终端应用程序(我使用的是MacOSX)。使用Java,我想执行一些命令以获得最佳的移动效果。这就是我目前的情况:

String[] commands = {"/Users/dejoridavid/Desktop/stockfish-6-64", "isready", "uci"};
Process process = null;
try {
    process = Runtime.getRuntime().exec(commands);
} catch (IOException e) {
    e.printStackTrace();
}

BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));

// read the output from the command
String s;
try {
    while ((s = stdInput.readLine()) != null) {
        System.out.println(s);
    }
} catch (IOException e) {
    e.printStackTrace();
}

数组中的第一个命令调用终端应用程序。第二个和第三个都是应用程序内命令。现在我有一个问题。只执行前两个命令,其结果在控制台中打印,忽略第三个命令。我做错什么了吗?请告诉我如何同时执行第三个(或更多、第四个、第五个等)命令。

您不能使用
Runtime.getRuntime().exec()
在另一个程序中执行命令。 传递给exec方法的数组将数组的第一个元素作为命令,其他元素作为命令的参数

从public的javadoc
processexec(String[]cmdarray)抛出IOException

参数:cmdarray-包含要调用的命令及其 参数。

您必须通过调用
Runtime.getRuntime().exec()

然后,您必须使用调用
Runtime.getRuntime().exec()


要检索进程的inputstream和outputstream,请在进程对象上使用
getInputStream()
getOutputStream()
方法

是否总是第三个命令?你试过其他命令吗?也许看看,不知道它是否有帮助,如果你正在使用这种方法,那么值得阅读以下内容,以防你发现自己难以跟踪bug:你能发布一些代码吗,举个例子,这说明了我应该如何处理这个问题?您可以在这里找到一个使用bash shell的示例,如果您发现这个答案有用且正确,您可以使用绿色检查和向上投票来标记它。非常感谢。