Java:读取控制台时出现NoSuchElementException

时间:2013-03-16 12:36:03

标签: java exception java.util.scanner

我已经做了一些研究,但我一无所获。

所以这是我的代码:

public void play(){
    System.out.print("Make your choice ( R - P - S) : ");
    Scanner sc = new Scanner(System.in);
    char choice = sc.next().charAt(0);
    setChoice(choice);
    sc.close();
}

第一次进入此功能时,一切正常,但下次,它会在我的功能的第3行抛出NoSuchElementException。 另一件事:当我删除sc.close()行时,问题就会消失,但我想保留该行。

任何解决方案?感谢

3 个答案:

答案 0 :(得分:3)

如果您关闭Scanner,它也会关闭基础输入流,即System.in。所以你无法关闭它。

答案 1 :(得分:0)

不要关闭Scanner这是问题所在。它将关闭基础输入流

sc.close();

答案 2 :(得分:0)

Scanner.close

  

如果此扫描仪尚未关闭,则表明其底层   可读也实现了Closeable接口,然后是可读的   将调用close方法。如果此扫描仪已经关闭,那么   调用此方法将无效。

System.inInputStream,它实现了Closeable

这意味着在close()上调用sc会调用close()的{​​{1}}方法,该方法会关闭输入流并释放与之关联的所有系统资源。