我正在构建一个客户端应用程序,以在Windows中执行 .bat 文件,并将结果发送到服务器。我使用FutureTask
处理stdout
和stderr
inputstream
并获得结果状态。
除蝙蝠中的START
命令外,其他所有命令均正常运行。当我使用START "" "D:/abc.exe"
执行蝙蝠以启动 .exe 时,BufferedReader(inputstream)
中的FutureTask
会挂在readLine()
上,直到exe关闭。
这是我的代码:
String path = "D:/xxxx.bat";
Process p = Runtime.getRuntime().exec("cmd.exe", "/c", path);
InputStream in = p.getInputStream();
InputStream er = p.getErrorStream();
StreamOut out = new StreamOut(in, "out");
FutureTask<boolean> outResult = new FutureTask<>(out);
new Thread(outResult).start();
StreamError error = new StreamError(er, "error");
FutureTask<boolean> errResult = new FutureTask<>(error);
new Thread(errResult).start();
Boolean success = outResult.get(); // stuck here
Boolean error = errResult.get(); // and here
和StreamOut类:
@Override
public Boolean call() {
boolean success = true;
try {
BufferedReader reader = new BufferedReader(new InputStream(in));
String line = null;
while ((line = reader.readLine()) != null) {
....
sendLine(line);
....
}
return success;
}
这是xxxx.bat:
start "" "D:/abc.exe"
我该如何解决?