我用来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)?
Scanner每次调用时都不应创建新实例ReadCommand.创建一个并在读取输入时重复使用它.
从文档:
当扫描仪关闭时,如果源实现了Closeable接口,它将关闭其输入源.
因此,System.in在您阅读第一个输入后,您的流将关闭.