首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.util.Scanner:等待输入

java.util.Scanner:等待输入
EN

Stack Overflow用户
提问于 2012-12-19 18:22:12
回答 1查看 1.6K关注 0票数 1

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

代码语言:javascript
复制
try
{
    ICommand cmd = cmdReader.ReadCommand();
    cmd.Execute(conn);
}
catch(MyException ex)
{
    // print a message about unknown command
    continue;
}

其中ReadCommand的实现方式如下:

代码语言:javascript
复制
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中使用循环)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-19 18:23:49

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

documentation中:

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

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

另请参阅Java Scanner does not wait for input

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13950154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档