当前位置: 首页 > 知识库问答 >
问题:

如何从Java程序持续输入到EXE的控制台?

上官和韵
2023-03-14

我有一个 EXE 文件,addOne.exe它不断从控制台上的用户那里获取整数输入(不是命令行参数)并将整数 1 输出到控制台上。示例输出如下所示:

1
2

6
7

29
30
...

我已经使EXE输出工作,也就是说,每当EXE输出文本到控制台时,从Java程序中打印该文本。我正在尝试:

  • 使用<code>Scanner从Java程序获取用户输入。nextInt()并作为控制台输入输入到EXE
  • 我需要一次发送一个输入,这意味着只需在程序结束时关闭BufferedWriter流并将流一次输入到EXE中是行不通的

目前,我有以下代码:

Process process = Runtime.getRuntime().exec("D:\\addOne.exe");
...
Scanner keyboard = new Scanner(System.in);
String input = "";
OutputStream stdin = process.getOutputStream();
while (!input.equals("exit")) {
    try(BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin))) {
        input = keyboard.nextLine();
        writer.write(input);
    } catch (IOException ex) {
        Logger.getLogger(CmdLineTest.class.getName()).log(Level.SEVERE,null,ex);
    }
}

但是,每当我运行这段代码时,while循环的第一次迭代(第一次输入内容)能够将输入发送到EXE,但是在第一次迭代之后,会给出错误< code > Java . io . io exception:Stream Closed 。

如何在while循环中继续从< code>Scanner.nextInt()获取用户输入

非常感谢。

编辑:writer.flush()似乎没有将用户输入从Java程序输入到EXE中。

编辑:见下面我的回答

共有2个答案

鄂坚
2023-03-14

似乎使用writer.flush()将流输入到EXE中,但在EXE处理输入之前,流需要writer.newLine(),因为控制台要求在输入后按下回车键。

这是工作代码:

while (true) {
    try {
        input = keyboard.nextLine();
        writer.write(input);
        System.out.println("IN: "+input);
        writer.newLine();
        writer.flush();
    } catch (IOException ex) {
        Logger.getLogger(CmdLineTest.class.getName()).log(Level.SEVERE, null, ex);
    }

}
陈马鲁
2023-03-14

切换try语句的范围,以便您只创建1个BufferedWriter。当您的try-with-资源代码块结束时,写入器关闭,扩展名stdin也是如此。因此,不能为该对象创建更多的写入器。

try([resources]) {
    while([condition]) {
        ...
    }
} catch(IOException ex) {
    ...
}
 类似资料:
  • 如何为控制台窗体应用程序创建exe?

  • 问题内容: 我一直在尝试从Java应用程序中检索“ unicode用户输入”,以获得一个小的实用程序片段。问题是,它似乎在“开箱即用”的Ubuntu上运行,我猜它在UTF-8上具有操作系统范围的编码,但是从“ cmd”运行时在Windows上不起作用。考虑的代码如下: 在Ubuntu上的输出(不对配置进行任何更改): 在Windows CMD提示符下输出(绝不受JAVA_TOOL_OPTIONS影

  • 问题内容: 我已经使用了几个模块来制作适用于Python的EXE,但是我不确定自己是否做对了。 我应该怎么做,为什么?请根据个人经验回答,并在必要时提供参考。 问题答案: 自动将PY 转换为EXE- 使用简单的图形界面(从Eel和PyInstaller在Python中构建)将.py转换为.exe。 py2exe可能是您想要的,但是它仅适用于Windows。 PyInstaller可在Windows

  • 问题内容: 通过控制台进行任何输入的数据类型(如我使用BufferedReader类所做的那样)为String。之后,我们将其类型转换为需要查询的数据类型(如Inter.parseInt()为整数)。但是在C语言中,我们可以接受任何输入原始数据类型,而在Java中,所有输入类型都是Neccerily String。为什么是这样? 问题答案: 控制台输入实际上以一系列字节而不是字符串的形式读入。这是

  • 问题内容: 如何从控制台输入中屏蔽密码?我正在使用Java 6。 我尝试使用,但无法使用。一个完整的例子可能实际上对我有帮助。 这是我的代码: 我收到 问题答案: 一个完整的例子?运行以下代码:(注意:此示例最好在控制台中运行,而不是从IDE内部运行,因为在这种情况下System.console()方法可能返回null。)

  • 问题内容: 如何使用该类从控制台读取输入?像这样: 基本上,我只需要让扫描程序读取用户名的输入,然后将输入分配给变量。 问题答案: 一个简单的例子来说明如何从中读取单个整数。这真的很简单。 要检索用户名,我可能会使用。 如果你想对输入进行更多控制,或者仅验证变量,也可以使用。 你可以在API文档中找到有关其实现的更多信息