java.util.Scanner:等待输入

时间:2012-12-19 10:22:12

标签: java

我使用java.util.Scanner从控制台读取命令。

try
{
    ICommand cmd = cmdReader.ReadCommand();
    cmd.Execute(conn);
}
catch(MyException ex)
{
    // print a message about unknown command
    continue;
}

ReadCommand的实施方式如下:

try (Scanner scanIn = new Scanner(System.in)) 
{
    if (!scanIn.hasNextLine()) return null;

    line_ = scanIn.nextLine();

    ICommand command = parser_.ParseCommand(line_);
    return command;
}

在第一次迭代中代码工作正常,我写了一些无效的东西(不是命令),代码打印一个警告并继续。但是,即使我在控制台中写了一些内容,其他迭代也会在null返回if (!scanIn.hasNextLine()) return null;。看起来java.util.Scanner看不到输入。难道我做错了什么?然后我如何等待用户输入(不想使用sleep的循环)?

1 个答案:

答案 0 :(得分:5)

每次致电Scanner时,都不应创建新的ReadCommand个实例。创建一个并在读取输入时重复使用它。

来自documentation

  

当扫描仪关闭时,如果源实现了Closeable接口,它将关闭其输入源。

因此,在您阅读第一个输入后,您的System.in流已关闭。

另见Java Scanner does not wait for input