ProcessBuilder在收到错误后卡住了

我试图远程执行.bat文件并实现以下代码行:

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循环。但它成功执行脚本。 任何forms的帮助表示赞赏。 谢谢

你需要确保你也在处理stderr,你应该在不同的线程中处理这两个流。

阅读本文并确保遵循所有建议。

编辑:看看你编写的代码,你似乎已经从这篇精确的文章中复制了代码。 事实上,它看起来像列出4.3(MediocreExecJavac.java)。

在.start()之前添加redirectErrorStream(true)并读取getInputStream()。 这将读取stderr并将其与stdout合并为一个响应,该响应可以使用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());