【问题标题】:Console program doesn't react on sending \n to stdin控制台程序对发送 \n 到标准输入没有反应
【发布时间】:2015-04-09 03:34:11
【问题描述】:

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

【问题讨论】:

  • 使用任何可以解释它的字符流。
  • 欢迎堆栈溢出。为了获得好的帮助,您可能需要指定您期望发生的事情 - 为什么您希望它的行为与它的行为有所不同?你想发生什么?是否要向“接收”线程发送“\n”的字节码?

标签: java process console stdin


【解决方案1】:

大概您希望写入outputStream 的换行符会触发您可以使用is 读取的内容。

这里有几个可能的原因:

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

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

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


如果我尝试对此进行调试,我会尝试确定问题是否在于换行符没有到达example.exe,响应没有被example.exe 写入/刷新,或者Java 端无法读取它...由于某种原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多