2016-03-27 12 views
0

whileループでBufferedReaderを閉じるときに、ループが2回目に実行されたときにIOException: Stream closedがスローされます。whileループでBufferedReaderを閉じるには

私のコードは次のようである:

import java.io.*; 

class Test { 
    public static void main(String[] args) { 
     int option = 0; 
     BufferedReader br = null; 
     while (option != -1) { 
      try { 
       br = new BufferedReader(new InputStreamReader(System.in)); 
       try { 
        option = Integer.parseInt(br.readLine()); 
       } catch (NumberFormatException e) { 
        option = -1;  
       } 

       br.close(); 
      } catch (IOException e) { 
       System.err.println(e); 
       System.exit(-4); 
      } 

      System.out.println(option); 
     } 
    } 
} 

私はBufferedReaderのを閉じるにはどうすればよいですか?前もって感謝します。あなたが最近十分バージョン

try { 
      br = new BufferedReader(new InputStreamReader(System.in)); 
      try { 
       option = Integer.parseInt(br.readLine()); 
      } catch (NumberFormatException e) { 
       option = -1;  
      } 
     } catch (IOException e) { 
      System.err.println(e); 
      System.exit(-4); 
     } finally { 
      br.close(); 
     } 

を使用している場合は例外が発生している場合は

答えて

2

は、どのように私はwhileループwhileループでそれを閉じる

あなたあるにBufferedReaderの閉じることができ、それが問題です。

を開き、それ前ループ、そしてそれはSystem.in巻き付けだとして再度開くことができない、全くそれを閉じないでください。

+0

バッファリングされたリーダーをループの前に開くと、そのバッファリングされたリーダーを閉じる必要はありませんか? – Fingal

+0

いいえ、私はあなたが 'System.in'の周りに巻かれているので、閉じてはいけないということです。ああ待って、それは私が実際に言ったことだ。 – EJP

-1

あなたは物事

try { 
      br = new BufferedReader(new InputStreamReader(System.in)); 
      try { 
       option = Integer.parseInt(br.readLine()); 
      } catch (NumberFormatException e) { 
       option = -1;  
      } 

      br.close(); 
     } catch (IOException e) { 
      System.err.println(e); 
      br.close(); 
      System.exit(-4); 
     } 
} 

のカップルを行うことができ、コードがcatchステートメントにすぐに進行し、 finallyステートメントが存在する場合はそれを返します。

また、例外処理の全体的なポイントは、発生する可能性のある例外を処理することです。例外的にシステムを終了させたくないのですが、とにかく例外を処理しなかった場合、コードは終了します。

+0

タイトル、質問、およびコードに 'while'ループが存在すると、彼がJVMを終了したい、または' NumberFormatException'でループを終了する可能性があるという示唆と矛盾します。 – EJP

関連する問題