После использования метода scan.close() я не могу открыть другой сканер. Я искал свой вопрос в Google, чтобы найти только людей, предлагающих решение для обходного пути. Я просто хочу понять, почему это проблема в первую очередь. кто-нибудь может объяснить, почему?
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
, так что вы ничего не можете с него прочитать. Вопрос в том, зачем его вообще закрывать? Если вам понадобится еще один, почему бы не использовать тот же самый? - person user207421   schedule 05.10.2019