【发布时间】:2021-01-05 18:34:03
【问题描述】:
我已经为 java 创建了一个简单的控制台应用程序,它使用 JavaBufferedReader 从终端读取命令。由于某种原因,发出的第一个命令总是被完全忽略。即使在调试时没有读取任何值并且输入字符串仍然没有初始化。发出第二个命令后,输入字符串得到我在控制台中写入的值。
我正在使用 IntelliJ 和带有 gradle 和 JDK 11 的集成终端。 我几乎看不出任何原因,为什么第一个命令被完全忽略了。
BufferedReader inReader = new BufferedReader(new InputStreamReader(System.in));
以及主要的shell功能
public void runMainLoop() throws IOException {
boolean quit = false;
while (!quit) {
System.out.print("prompt> ");
final String input = inReader.readLine(); // <-- This input gets no value after pressing "enter".
if (input == null) { // all other "enter" after the first one are working
break;
}
try (final Scanner scanner = new Scanner(input)) {
scanner.useDelimiter("\\s+");
if (!scanner.hasNext()) {
printError("No command specified!");
break;
}
switch (scanner.next().toLowerCase()) {
case "help":
printHelpMessage();
break;
case "quit":
quit = true;
println("Terminate...");
break;
default:
printError("Unknown command given.");
printHelpMessage();
break;
}
}
}
}
【问题讨论】:
-
只是评论说我无法使用 IntelliJ 和 JDK 15 重现这一点。
-
“没有价值”是什么意思?它必须是某种东西,或者你的意思是它是NULL?您是否使用调试器遍历代码以查看第一次迭代发生了什么?
-
调试器甚至不会停在那里。它没有价值。不是 null 或任何东西,只是什么都没有。我很确定,问题不在代码中。它可能与配置有关,但我不知道错误可能出在哪里。
-
调试器无法识别,我输入了一个命令。调试器显示“应用程序正在运行”。然后我输入一个新命令,所有下一个命令都在工作,并且调试器在输入命令后停止。它只是在第一个之后没有。
标签: java console-application user-input