En el código a continuación, tiene dos métodos, escáner1 y escáner2, en ambos métodos se crea un nuevo objeto de Escáner y se escanea la entrada después de cerrar el Escáner invocando close().
import java.util.Scanner; public class TestScanner { public static void scanner1(){ Scanner sc = new Scanner(System.in);//created object of scanner System.out.println("Enter string :"); String input = sc.nextLine(); //scanning input sc.close(); //closing scanner object } public static void scanner2(){//problem in scanner2 Scanner sc = new Scanner(System.in);//created another scanner object System.out.println("Enter String :"); String input = sc.nextLine();//scanning object sc.close();//closing the input } public static void main(String[] args) { scanner1(); scanner2();//problem here } }Para el método del escáner 1, funciona bien, pero cuando se invoca el método del escáner 2, aparece el siguiente error:
Ingrese la cadena: excepción de India en el hilo "principal"
java.util.NoSuchElementException: No se encontró ninguna línea Introduzca la cadena: en java.util.Scanner.nextLine(Fuente desconocida) en cheggapril.TestScanner.scanner2(TestScanner.java:17) en cheggapril.TestScanner.main(TestScanner.java:24)
El problema es por qué en el método scanner2 el escáner no puede escanear la entrada del usuario incluso en este método creando un nuevo objeto de Scanner. Por favor, dé una explicación clara. cualquier referencia o ejemplo será muy agradecido.
La razón es bastante simple, al cerrar el primer objeto del escáner también se cierra internamente el flujo de entrada que en realidad está siendo utilizado por el segundo escáner.
sus opciones son: use solo un escáner o ciérrelos cuando esté seguro de que ya no se necesitan todos.