2010-09-19 49 views
8

我一直在研究這個程序很長一段時間,我的大腦被炸了。我可以使用一些幫助從一個人在看。爲什麼我的程序中「必須被捕獲或被宣佈爲拋出」?

我試圖做一個程序,逐行讀取文本文件,每行都被製作爲ArrayList,所以我可以訪問每個令牌。我究竟做錯了什麼?

import java.util.*; 
import java.util.ArrayList; 
import java.io.*; 
import java.rmi.server.UID; 
import java.util.concurrent.atomic.AtomicInteger; 

public class PCB { 
    public void read (String [] args) { 
     BufferedReader inputStream = null; 

     try { 
      inputStream = new BufferedReader(new FileReader("processes1.txt")); 

      String l; 
      while ((l = inputStream.readLine()) != null) { 
       write(l); 
      } 
     } 
     finally { 
      if (inputStream != null) { 
       inputStream.close(); 
      } 
     } 
    } 

    public void write(String table) { 
     char status; 
     String name; 
     int priority; 

     ArrayList<String> tokens = new ArrayList<String>(); 

     Scanner tokenize = new Scanner(table); 
     while (tokenize.hasNext()) { 
      tokens.add(tokenize.next()); 
     } 

     status = 'n'; 
     name = tokens.get(0); 
     String priString = tokens.get(1); 
     priority = Integer.parseInt(priString); 

     AtomicInteger count = new AtomicInteger(0); 
     count.incrementAndGet(); 
     int pid = count.get(); 

     System.out.println("PID: " + pid); 
    } 
} 

我正要戳出我的眼球。我得到了三個錯誤:

U:\Senior Year\CS451- Operating Systems\Project1 PCB\PCB.java:24: unreported exception java.io.IOException; must be caught or declared to be thrown 
      inputStream.close();} 
          ^
U:\Senior Year\CS451- Operating Systems\Project1 PCB\PCB.java:15: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown 
     inputStream = new BufferedReader(new FileReader("processes1.txt")); 
             ^
U:\Senior Year\CS451- Operating Systems\Project1 PCB\PCB.java:18: unreported exception java.io.IOException; must be caught or declared to be thrown 
     while ((l = inputStream.readLine()) != null) { 
             ^

我在做什麼錯?

回答

13

當您在Java中使用I/O時,大多數情況下必須處理IOException,這可能會在讀/寫或關閉流時發生。

你必須把你的敏感塊放在try // catch塊中,並在這裏處理異常。

例如:

try{ 
    // All your I/O operations 
} 
catch(IOException ioe){ 
    //Handle exception here, most of the time you will just log it. 
} 

資源:

+0

我該怎麼做,雖然? – Luron 2010-09-19 19:36:56

+0

閱讀示例的教程。 – camickr 2010-09-19 19:39:36

8

Java的編譯時檢查異常規範。您必須捕獲異常或將其聲明在方法簽名中。這裏是你如何聲明它可能會從你的方法拋出:

public void read (String [] args) throws java.io.IOException { 

如果你的方法需要做一些迴應,趕上例外。如果您的調用者需要了解失敗,請將其聲明爲拋出。

這些不是相互排斥的。有時,捕捉異常,做某些事情並重新拋出異常或包裝原始異常(「原因」)的新異常是非常有用的。

RuntimeException及其子類不需要聲明。

0

良好的IDE會爲您創建catch塊或將該異常添加到方法聲明中。

請注意,如果按照Colin的解決方案向方法聲明中添加異常,則任何調用方法的方法也必須具有合適的catch塊或在方法聲明中聲明異常。

-3

我有同樣的問題。我解決了通過添加彈簧庫「org.springframework.core」

相關問題