我有一个 EXE 文件,addOne.exe
它不断从控制台上的用户那里获取整数输入(不是命令行参数)并将整数 1 输出到控制台上。示例输出如下所示:
1
2
6
7
29
30
...
我已经使EXE输出工作,也就是说,每当EXE输出文本到控制台时,从Java程序中打印该文本。我正在尝试:
目前,我有以下代码:
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中。
编辑:见下面我的回答
似乎使用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);
}
}
切换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文档中找到有关其实现的更多信息