繁体   English   中英

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

[英]How do you continuously input from Java program to EXE's console?

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

1
2

6
7

29
30
...

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

  • 使用Scanner.nextInt()Java程序获取用户输入 ,并作为控制台输入输入到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,但是在第一次迭代之后,错误java.io.IOException: Stream Closed is给出。

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

谢谢。


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


编辑:请参阅下面的答案

切换trywhile语句的范围,这样你只能制作1个BufferedWriter 当您的try-with-resources代码块结束时,编写器将被关闭,并且扩展名为stdin 因此,不能再为该对象制作作者。

try([resources]) {
    while([condition]) {
        ...
    }
} catch(IOException ex) {
    ...
}

似乎使用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);
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM