가자미의 개발이야기
[Java] Scanner의 NoSuchElementException 오류 본문
#요약:
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메소드를 지워 문제를 해결했다.
'Java > 자바 기본 문법' 카테고리의 다른 글
[Java] Comparator와 Comparable (0) | 2021.06.28 |
---|---|
[Java] Iterator, ListIterator (0) | 2021.06.28 |
[JAVA] 자바 재귀함수 활용 예시 (0) | 2021.03.30 |
[자바] jdk 설치 이후 디렉토리 구조 (0) | 2021.03.02 |
[자바] 컬렉션 인스턴스 동기화 (0) | 2021.03.02 |