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메소드를 지워 문제를 해결했다.