【发布时间】:2017-07-09 10:45:48
【问题描述】:
我有一个 jar 文件,它一直在等待用户输入、处理和打印结果(多行),就像这样
>Input sentence 1
Result 1
Result 2
>Input sentence 2
Result 1
Result 2
Result 3
>
退出这个jar程序的唯一方法是按Ctrl + C。
现在,我想从我的 java 程序中调用这个 jar 文件。我的代码如下所示:
processBuilder = new ProcessBuilder(PATH_TO_BIN);
Process process = processBuilder.start();
writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
writer.write(inputSentence);
writer.newLine();
writer.flush();
String line;
while ((line = reader.readLine()) != null){ //<<<< it hangs here
System.out.println(line);
}
我的程序可以成功打印出“jar”程序返回的结果,但是一直挂在下一个reader.readLine(),我无法为“jar”程序提供下一个输入。
有没有办法解决这个问题?
提前致谢!
【问题讨论】:
-
您没有在
while循环中向 jar 中写入任何内容。它等待输入,而您正在等待它的输出。在 `System.out.println 之后添加一些write -
@AhmadWabbi 也许我在我的问题中没有说得很清楚,但是 JAR 文件可能会产生多行结果,而不仅仅是一行,这就是为什么我需要使用 @ 读取所有结果行987654326@循环如你所见
-
在您的示例中甚至不清楚。在这种情况下,无法区分您的程序等待下一个结果和永远等待,因为 jar 完成了生成结果并等待 Ctrl-C。即使
peek也无法区分。除了在足够的超时后使用线程发送 Ctrl-C 之外,我没有看到其他解决方案。
标签: java