为什么在cmd.exe中启动可执行程序时Runtime.exec()挂起

时间:2019-01-11 03:39:09

标签: java window

我正在构建一个客户端应用程序,以在Windows中执行 .bat 文件,并将结果发送到服务器。我使用FutureTask处理stdoutstderr 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"

我该如何解决?

0 个答案:

没有答案