2014-08-29 99 views
-1

出於某種原因,我得到了「未報告的異常java.io.ioexception必須被捕獲或聲明爲拋出」。我拋出一個I/O異常在此方法:Java類中的「未報告的異常java.io.ioexception必須被捕獲或聲明爲拋出異常」

private void setChar() throws IOException 
    { 
     try 
     { 
      int data = in.read(); 
      if(data==-1) 
      { 
       eof = true; 
      } 
      else 
      { 
       currentChar = (char) data; 
      } 
     } 
     catch (IOException e) 
     { 
      System.exit(0); 
     } 
    } 

而且我在這裏所說的方法(在構造函數):

private BufferedReader in; 
private char currentChar; 
private boolean done; 

public Scanner(InputStream inStream) 
{ 
    in = new BufferedReader(new InputStreamReader(inStream)); 
    done = false; 
    getNextChar(); 
} 

public Scanner(String inString) 
{ 
    in = new BufferedReader(new StringReader(inString)); 
    done = false; 
    setChar(); 
} 

上午我打電話/拋出異常錯了嗎?

+0

將你的頭稍微向右轉,並在** Related **部分下閱讀。 – 2014-08-29 23:16:51

回答

3

你的Scanner構造函數可以拋出IOException,因爲它叫setChar(),並且可以拋出它。

你必須聲明你的構造函數拋出異常,或者在構造函數中捕獲異常並處理它。

+0

我認爲這是罰款,因爲我在方法中處理它? – Surz 2014-08-29 23:23:14

+0

啊,在這種情況下,您需要從該方法中移除拋出IOException,因爲如果不捕獲它並處理它,它就無法拋出它。 – 2014-08-29 23:24:07

+0

我添加了以下每條領帶我使用setChar() 嘗試getNextChar(); } catch(IOException e) { System.exit(0); e.printStackTrace(); } – Surz 2014-08-29 23:24:47

1

你的setChar()方法說它可以拋出一個IOException,但你的第二個構造函數不處理它。

您或者需要更改setChar()方法簽名以避免拋出異常(因爲實際上它不拋出IOException),或者讓您獲得構造函數來處理它,例如...

public Scanner(String inString) 
    { 
     in = new BufferedReader(new StringReader(inString)); 
     done = false; 
     try { 
      setChar(); 
     } 
     catch (IOException ie){ 
      System.exit(1) 
     } 
    } 
1

setChar();在你的構造函數中拋出一個IOException

因此,您必須在構造函數中捕獲它,否則您的構造函數也必須拋出IOException

但是,在聲明setChar()方法後,您甚至不需要添加throws IOException,因爲您正在捕獲其中的潛在異常。

相關問題