繁体   English   中英

System.in 上的 Java BufferedReader 忽略第一行/命令

[英]Java BufferedReader on System.in ignores first line / command

我使用 JavaBufferedReader 为 java 创建了一个简单的控制台应用程序,以从终端读取命令。 由于某种原因,发出的第一个命令总是被完全忽略。 即使在调试时没有读取任何值并且输入字符串仍然没有初始化。 发出第二个命令后,输入字符串得到我在控制台中写入的值。

我正在使用 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;
        }
      }
    }
  }

我建议应用分而治之的调试策略:从可以工作的绝对最小值开始,然后添加部分程序,直到它停止工作。 然后检查最后添加的部分。

这对我有用,所以我猜你的问题出在其他地方:

BufferedReader inReader = new BufferedReader(new InputStreamReader(System.in));
String input = inReader.readLine();
System.out.println(input);

现在我在我的 IntelliJ 中测试了你的代码。 当第一个命令没有值按回车键时,它会打印“未指定命令”以及其他命令。 它会根据您的开关盒打印出预期的答案。 (作为第一个命令,也在第一个命令之后)我的意思是它对我有用。 请详细说明您的情况出了什么问题。

暂无
暂无

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

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