가자미의 개발이야기

[Java] Scanner의 NoSuchElementException 오류 본문

Java/자바 기본 문법

[Java] Scanner의 NoSuchElementException 오류

가자미 2021. 5. 25. 20:52

#요약:

Scanner가 close 될 때 그 안에 들어있는 underlying stream도 함께 close 가 됩니다. 이 경우 new Scanner(System.in) 로 생성했으니까 표준입력인 System.in 이 close 되는 것입니다.

다시 Scanner를 생성해도 이미 System.in은 닫혔기 때문에 에러를 일으킨다.

 

#에러 발생 코드

public class ErroPractice{
	//메뉴 동작 처리
	static void input(HashMap<String, String> hs) {
		Scanner scanner = new Scanner(System.in);
		//중략...
        scanner.close();
    }
		
	public static void main(String[] args) {
		//중략...
		Scanner scanner = new Scanner(System.in);
        	input(hash);
        	scanner.nextInt();//에러발생지점
		scanner.close();
		System.out.println("프로그램 종료...");
	}
}

 

input메소드를 호출하면서 Scanner가 close된다.

닫힌 Scanner에서 nextInt메소드를 요청하므로 에러가 발생하는 것이다.

 

#에러 제거 코드

public class ErroPractice{
	//메뉴 동작 처리
	static void input(HashMap<String, String> hs) {
		Scanner scanner = new Scanner(System.in);
		//중략...
        //scanner.close()를 제거했다.
    }
		
	public static void main(String[] args) {
		//중략...
		Scanner scanner = new Scanner(System.in);
        	input(hash);
        	scanner.nextInt();//에러발생지점
		scanner.close();
		System.out.println("프로그램 종료...");
	}
}

input메소드의 close메소드를 지워 문제를 해결했다.