我正在使用JAVA为控制台程序编写GUI。它启动并运行良好,但当我发送“\ n”或“\ r \ n”到它的标准输入时,如果我只是在终端启动该程序并按“Enter”,它就没有反应,因为它会做出反应。
此代码用于启动流程:
String cmd="example.exe";
process = new ProcessBuilder(cmd).start();
此代码用于发送“\ n”
OutputStream outputStream = process.getOutputStream();
outputStream.write("\n".getBytes());
outputStream.flush();
在其他主题中,我试图从这个过程中读取
while ((line = is.readLine()) != null && !Thread.currentThread().isInterrupted()) {
...
}
如何正确发送“\ n”以接收来自流程的信息?
更新: 我需要发送一个新的线符号。或者“按Enter”。 我读出来并且错误,两者都是空的。 应用程序始终将其状态报告为按Enter键的状态。所以没有反应是一个错误。
答案 0 :(得分:0)
据推测,您期望写入outputStream
的换行符触发您可以使用is
阅读的内容。
以下是几个可能的原因:
您可能正在阅读错误的信息流。外部程序可能正在写入“标准错误”而您正在读取“标准输出”,反之亦然。
外部应用程序可能无法刷新。例如,如果输出被定向到交互式输出流(例如“控制台”),它(或它使用的I / O库)可能仅在每个换行符之后刷新输出。将程序输出连接到JVM的管道可能不会显示为交互式。
这些只是猜测......
如果我正在尝试调试此问题,我会尝试确定问题是新行是否未到达example.exe
,而example.exe
没有写入/刷新响应或者说Java方面由于某种原因无法读取它。