【发布时间】:2019-10-05 02:47:34
【问题描述】:
使用scanner.close() 方法后,我无法打开另一个扫描仪。我在谷歌上搜索了我的问题,只找到提供解决方案的人。我只是想首先了解为什么这是一个问题。谁能解释一下为什么?
import java.util.Scanner;
public class Main {
public static Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
scan.close();
Scanner scan = new Scanner(System.in);
System.out.println(scan.next()); //NoSuchElementException
}
}
我知道同时打开多个扫描仪会导致 outOfMemoryError,所以我想为什么不将它作为一个可以从中调用方法的单例实用程序类呢?此类将在每次使用时打开和关闭扫描仪,因此流不需要保持打开状态。
public class Main {
public static void main(String[] args) {
LinkedList<Scanner> list = new LinkedList<>();
while(true) {
list.add(new Scanner(System.in)); //OutOfMemoryError
}
}
}
这又回到了我的问题的根源,如果我们都能理解扫描仪类为什么会这样工作,也许我们可以想出一个解决方案?
【问题讨论】:
-
可以,但是您关闭了
System.in,因此您无法从中读取任何内容。真正的问题是为什么要关闭它?如果您需要另一个,为什么不继续使用同一个? -
我只是为了探索。我已经知道如何使用同一个。我只是在进一步研究 Scanner 类及其工作原理,以及为什么在 System.in 关闭后我无法重新打开它。
标签: java java.util.scanner nosuchelementexception