[英]Java: Communicating with a command line application
我想用Java編寫國際象棋GUI。 用戶可以輸入一個動作,然后我希望程序進行一個動作。 因此,我將使用UCI(通用國際象棋界面)。 UCI是一種終端/命令行應用程序(我正在使用Mac OS X和Terminal),它可以計算位置的最佳移動。 現在,我需要做的是對該終端應用程序進行讀寫操作。
例如:我想要某個位置的最佳移動,所以我輸入:“ go
”(計算最佳移動)
假設我得到了這個答案:“ e2e4
”(意味着將Pawn(在國際象棋中是一塊棋子)從e2正方形移到e4正方形)
現在,我需要閱讀“ e2e4”,然后要求用戶進行下一步操作。 因此,我有點需要一直循環通過這些步驟,直到出現一個將死的人:1.要求采取行動2.計算最佳響應
我已經看過許多其他StackOverflow問題,都提出了相同的問題:如何在命令行/終端中運行命令並獲取其輸出。 但是所有答案僅使用一個命令,例如runtime.exec("ls");
但這只是一個命令。 我想要的是輸入命令,獲取響應,執行另一個命令等等,所以基本上我需要與Mac OSX的Terminal應用程序通信(交替輸入和輸出)。 如何在Java中完成?
您可以執行運行國際象棋程序的命令,然后檢查命令輸出的最佳動作(使用Process
)。
例如:
String move = null;
Process process = Runtime.getRuntime().exec("go");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getOutputStream()));
move = reader.readLine();
// 'move' now holds a reference to the chess program's output, or null if there was none.
只需查找Runtime.exec()的返回類型。 它返回一個java.lang.Process 。
它提供了兩種輸入和輸出流方法: getOutputStream()和getInputStream()
您可以讀寫打開的ex進程。 與BufferedReaders / BufferedWriters一起使用。
例如:(另請參見https://stackoverflow.com/a/14745245/2358582 )
import java.io.*;
public class c {
public static void main(String[] args) throws Exception{
Process p = Runtime.getRuntime().exec("cmd");
BufferedReader inp = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
//communication
setUpStreamGobbler(p.getInputStream(), System.out);
out.write("cmd\n");
out.flush();
}
public static void setUpStreamGobbler(final InputStream is, final PrintStream ps) {
final InputStreamReader streamReader = new InputStreamReader(is);
new Thread(new Runnable() {
public void run() {
BufferedReader br = new BufferedReader(streamReader);
String line = null;
try {
while ((line = br.readLine()) != null) {
ps.println("process stream: " + line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
輸出:
process stream: Microsoft Windows [Version 6.1.7601]
process stream: Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalte
n.
process stream:
process stream: P:\Java\ExcecuteFile>cmd
process stream: Microsoft Windows [Version 6.1.7601]
process stream: Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalte
n.
process stream:
我相信這個問題可能會對您有所幫助: 我問了類似的問題 ,希望這可以回答您的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.