【发布时间】:2024-08-21 23:45:01
【问题描述】:
我有以下代码:
ProcessBuilder pb = new ProcessBuilder("C:\\Program Files\\Java\\jdk1.8.0_111\\bin\\java", "-cp", "project_folder\\target\\classes", "package.ExternalProcess");
Process p = pb.start();
OutputStream processOutputStream = p.getOutputStream();
IOUtils.write("1" + System.lineSeparator(), processOutputStream);
InputStream processInputStream = p.getInputStream();
System.out.println("--1--");
System.out.println(process.isAlive()); // outputs true
String result = IOUtils.toString(processInputStream, "UTF-8"); //<-- hangs here
System.out.println("--2--");
p.waitFor();
System.out.println(result);
外部流程来源:
public class ExternalProcess {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = null;
try {
input = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("processed[" + input + "]");
}
}
第一个代码产生--1--
true
并坚持下去
如何更正程序以及为什么会挂起?
附言
当我尝试写作时
java -cp project_folder\target\classes package.ExternalProcess
当我向控制台写入内容并返回预期结果时,它从 cmd 等待
【问题讨论】:
-
"java" 应该是 java 的完整路径,例如 "/usr/bin/java"
-
@Aardvocate Akintayo Olusegun,更正了问题。没有帮助
-
@Aardvocate Akintayo Olusegun,反正我已经正确设置了 PATH 环境变量
标签: java process stdout stdin processbuilder