system.in上的java bufferedreader忽略第一行/命令

uplii1fm  于 2021-06-26  发布在  Java
关注(0)|答案(2)|浏览(413)

我已经为java创建了一个简单的控制台应用程序,它带有一个javabufferedreader来从终端读取命令。由于某些原因,发出的第一个命令总是被完全忽略。即使在调试时,也没有读取任何值,并且输入字符串仍然没有初始化。发出第二个命令后,输入字符串获取我在控制台中编写的值。
我正在使用intellij和gradle和JDK11的集成终端。我几乎看不出任何原因,为什么第一个命令被完全忽略了。

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;
        }
      }
    }
  }
rqcrx0a6

rqcrx0a61#

现在我用intellij测试了你的代码。在没有值作为第一个命令的情况下按enter键时,会打印“没有指定命令!”对于其他命令,它会根据您的切换案例打印出预期的答案(作为第一个命令,也是在第一个命令之后)我的意思是它对我有效。请再详细说明一下你的案子出了什么问题。

vjrehmav

vjrehmav2#

我建议应用分而治之的调试策略:从工作的绝对最小值开始,然后添加程序的部分内容,直到它停止工作。然后检查最后添加的部分。
这对我很有用,所以我猜你的问题在别的地方:

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

相关问题