2014-11-14 1 views
0

자바를 배우고 있고 파일의 레코드를 업데이트하는 방법을 썼습니다. 내가 겪고있는 문제는 사용자가 독자가 닫혀 있거나 입력을 지정할 수없는 다른 파일을 찾고 싶은지 묻는 것입니다.스트림이 닫히는 것과 관련된 이상한 오류

protected boolean Update() throws InputMismatchException 
{ 
    RoomService Init =new RoomService(); 
    Scanner input = new Scanner(System.in); 

     try { 
      boolean ans= true; 

     while(ans) 
     { 
      System.out.println("Please enter room number."); 
      String id = input.next(); 
      Init.Update(id); 
      System.out.println("Press Enter to Add more or no to exit"); 
      String choice = input.nextLine();// Skips this line 
       if (choice.equalsIgnoreCase("")) 
       { 
        continue; 
       } 
       else if(choice.equalsIgnoreCase("no")) 
       { 
        ans= false; 
       } 
        else 
        { 
         System.err.println("Wrong input"); 
         throw new IOException(); 
        } 
     } 

     } catch (IOException e) { 
      e.printStackTrace(); 
      fail=true; 
     } 
    return fail; 
} 

정확히 나는 또한 BufferedReader input = new BufferedReader(new InputStreamReader (System.in))

감사를 사용 아무것도 입력에서 저를 차단 무엇 궁금.

편집 : 스캐너 오류를 사용

은 다음과 같습니다 BufferedReader로 오류를 사용 java.util.NoSuchElementException

은 다음과 같습니다 때 java.io.IOException : 코드에서 다른 곳이 있다면 스트림

+0

정확한 오류 메시지는 무엇입니까? – Boann

답변

1

을 폐쇄하면 System.inScanner을 사용하는 경우 close()을 호출하지 않았는지 확인하십시오. ScannerSystem.in로 감싸지는 기본 입력 소스를 닫으려는 경우가 아니면 닫을 필요가있는 리소스가 없습니다. 이후 입력을 모두 차단할 수 있습니다.

+0

내가보기 및 추가 기능을 사용하고 있기 때문에 나는이 업데이트 방법을 반복 할 때 입력을 모두 받아들이므로 havent입니다. 스트림에 대해 조금 더 알고 있다면 뭔가 다른 것이 닫혀 있는지 확신 할 수 없습니다. –

+0

'Update' 메소드 만 실행하십시오. 더 이상 예외를 throw하지 않으면 코드의 일부가'System.in'을 닫는 것이 문제라는 것을 알고 있습니다. 그런 다음 코드의 일부를 한 번에 하나씩 다시 배치하여 어느 부분에서 코드를 작성하는지 식별하십시오. – Boann

+0

이 진드기가 그렇다고 생각하지만 잘 모르겠습니다. try-catch 리소스 내에서 함수를 반환하면 리소스를 닫을 수 있습니까? –