原因:
在同一程序中,关闭Scanner类后再次new Scanner(System.in);
源码中System.in 是静态类型
查看Scanner类的close方法:
public void close() {
if (closed)
return;
if (source instanceof Closeable) {
try {
((Closeable)source).close();
} catch (IOException ioe) {
lastException = ioe;
}
}
sourceClosed = true;
source = null;
closed = true;
}
可见 ((Closeable)source).close(); 这一句将导致关闭 System.in
如果再次用System.in做 Scanner的构造参数,将导致NoSuchElementException异常。
解决方法:
1.new Scanner(System.in)前不调用之前的 Scanner示例close方法。
2.程序尽量使用一个Scanner类,如需在多个方法中使用,应将Scanner类作为参数传递进方法内。