0

我有一个用户可以运行的 hacky Ant 命令来做一些事情。此命令提示用户输入。在 IntelliJ 中,在测试时,它可以正常工作。但是当我从终端运行 ant 目标时,我得到了奇怪的行为。这是代码:

    Scanner userIn = new Scanner(System.in);
    PrintWriter writer = new PrintWriter(System.out);
    writer.println(error + "  If you continue with the load, some data may be in a corrupted state.  Would you like to continue? (y/n): ");
    writer.flush();
    String userResponse = userIn.next();
    while (!(userResponse.equalsIgnoreCase("y") || userResponse.equalsIgnoreCase("n")
      || userResponse.equalsIgnoreCase("yes") || userResponse.equalsIgnoreCase("no"))) {
      writer.println("Invalid input.  Please specify if you would like to continue with the load. (y/n): ");
      writer.flush();
      userResponse = userIn.next();
    }
    return userResponse.equalsIgnoreCase("y") || userResponse.equalsIgnoreCase("yes");

从终端运行 ant 命令时,错误消息会正确显示,但是当用户输入输入时,要么什么都没有发生,要么我必须按回车键很多次才能处理任何事情。它也拒绝正确读取输入。如果我输入yes,它仍然会永远循环,提示输入,就好像用户输入了无效输入一样。

这是某种错误吗?我不擅长使用扫描仪吗?

编辑:我已经尝试使用 nextLine() 代替。有时,但并非始终如一,我得到一个 java.util.NoSuchElementException: No line found 异常。其他时候,如果我按 Enter 10 次以上,它就会起作用。

4

1 回答 1

1

我遇到了同样的问题,我的程序(通过 ant 运行)会创建一个扫描仪,但是当被要求输入时,程序似乎只是循环并且不接受任何输入,直到我用 ctrl+c 终止。原来问题是我的 build.xml 文件中的“fork”属性。我有 fork="yes" 并将其更改为“no”,或者只是将其完全取出,扫描仪工作得很好。希望这可以帮助!

于 2013-04-30T18:15:31.360 回答