NoSuchElement использует сканер дважды

Я работаю над кодом, который считывает пользовательский ввод, поэтому я сделал процедуру, которая делает именно это, читает и возвращает строку. при двойном вызове из другой процедуры возвращает ошибку NoSuchElementException, почему я не могу понять.

процедура чтения ввода:

    public static String read() {
    
72    Scanner leer = new Scanner(System.in);
73    String entry = leer.nextLine();
74    leer.close();
75    return entry;
    
    }

как я его использую:

...
    System.out.println("input value ");
    String padre = Entrada.read();
    System.out.println("input values ");
27  String reemplazado = Entrada.read();
...

я собираюсь

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at modulocarga.Entrada.leerEntradaUsuario(Entrada.java:73)
    at modulocarga.TablaSimbolica.addTaxonomica(TablaSimbolica.java:27)
    at modulocarga.Principal.main(Principal.java:8)

работает нормально в первый раз, когда я вызываю его, а затем он падает. что это может быть?


person user3583107    schedule 28.04.2014    source источник
comment
возможно, ваш первый ввод содержит разделитель строк, а второй ввод - нет, и сканер не находит строку правильно - и, следовательно, NSEE   -  person Bhaskar    schedule 29.04.2014
comment
См. здесь: stackoverflow.com/questions/4232588/   -  person maksimov    schedule 29.04.2014


Ответы (2)


Поскольку используется только один InputStream, его больше невозможно прочитать из закрытого источника ввода при втором вызове метода.

Либо воздержитесь от закрытия Scanner (или создайте один экземпляр класса Scanner, который будет закрыт в конце приложения)

person Reimeus    schedule 28.04.2014
comment
Если базовый поток закрыт, то при попытке чтения в этом потоке должно быть выдано IOException, а не NSEE. - person Bhaskar; 29.04.2014
comment
но опять же - может быть, Scanner превращает IOException в NSEE . - person Bhaskar; 29.04.2014
comment
удаление .close() решило проблему, может ли это вызвать другие проблемы? это необязательно? - person user3583107; 29.04.2014
comment
нет, как раз наоборот, не закрывайте Scanner, если не хотите, чтобы он потерпел неудачу - person Reimeus; 29.04.2014

Это связано с тем, что ваш сканер связан с System.in, и когда вы закрываете свой сканер, он также автоматически закрывает System.in. Что вы хотите сделать, так это просто закрыть сканер, не закрывая System.in.

Это поможет: Закрыть сканер, не закрывая System.in

person jianweichuah    schedule 28.04.2014