java.util.Scanner:等待输入

mav*_*rik 1 java

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

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

在哪里ReadCommand实施如下:

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

    line_ = scanIn.nextLine();

    ICommand command = parser_.ParseCommand(line_);
    return command;
}
Run Code Online (Sandbox Code Playgroud)

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

And*_*ter 5

Scanner每次调用时都不应创建新实例ReadCommand.创建一个并在读取输入时重复使用它.

文档:

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

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

另请参阅Java Scanner不等待输入