我使用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中使用循环)?
发布于 2012-12-19 18:23:49
不应在每次调用ReadCommand时都创建新的Scanner实例。创建一个,并在读取输入时重用它。
在documentation中:
当扫描器关闭时,如果输入源实现了Closeable接口,它将关闭输入源。
因此,在读取第一个输入之后,您的System.in流将被关闭。
https://stackoverflow.com/questions/13950154
复制相似问题