控制台程序在发送\ n到stdin时没有反应

时间:2015-02-09 11:46:35

标签: java process console stdin

我正在使用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键的状态。所以没有反应是一个错误。

1 个答案:

答案 0 :(得分:0)

据推测,您期望写入outputStream的换行符触发您可以使用is阅读的内容。

以下是几个可能的原因:

  1. 您可能正在阅读错误的信息流。外部程序可能正在写入“标准错误”而您正在读取“标准输出”,反之亦然。

  2. 外部应用程序可能无法刷新。例如,如果输出被定向到交互式输出流(例如“控制台”),它(或它使用的I / O库)可能仅在每个换行符之后刷新输出。将程序输出连接到JVM的管道可能不会显示为交互式。

  3. 这些只是猜测......


    如果我正在尝试调试此问题,我会尝试确定问题是新行是否未到达example.exe,而example.exe没有写入/刷新响应或者说Java方面由于某种原因无法读取它。