Java ProcessBuilder在收到错误后被卡住
我正在尝试远程执行.bat文件并实现以下代码行:Java ProcessBuilder在收到错误后被卡住,java,processbuilder,Java,Processbuilder,我正在尝试远程执行.bat文件并实现以下代码行: ProcessBuilder processBuilder = new ProcessBuilder(command); final Process process = processBuilder.start(); InputStream stderr = process.getErrorStream(); InputStreamReader isr = new InputStreamReader(stderr);
ProcessBuilder processBuilder = new ProcessBuilder(command);
final Process process = processBuilder.start();
InputStream stderr = process.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
System.out.println("Waiting ...");
System.out.println("Returned Value :" + process.exitValue());
但我的程序在循环时被卡住了。
它显示的错误是:
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
它从不退出while循环,但它成功地执行了脚本。
感谢您的任何帮助。谢谢您需要确保您也在处理stderr,并且您应该在单独的线程中处理这两个流 阅读并确保遵守所有建议 编辑:看看你写的代码,你似乎复制了这篇文章中的代码。事实上,它类似于清单4.3(MediocreExecJavac.java)。在.start()和读取getInputStream()之前添加redirectErrorStream(true)。这将读取stderr并将其与stdout合并到一个响应中,该响应可以用getInputStream()读取
或者,调用
processBuilder.redirectErrorStream(true)
将进程的标准错误重定向到其标准输出。然后,您只需要读取process.getInputStream()
。
ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder.redirectErrorStream(true);
final Process process = processBuilder.start();
InputStream stderr = process.getInputStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
System.out.println("Waiting ...");
System.out.println("Returned Value :" + process.exitValue());