2010-09-19 6 views
8

Ich arbeite seit einiger Zeit an diesem Programm und mein Gehirn ist gebraten. Ich könnte etwas Hilfe von jemandem verwenden, der herein schaut.Warum bekomme ich "muss gefangen oder erklärt werden geworfen zu werden" in meinem Programm?

Ich versuche, ein Programm zu machen, das eine Textakte Zeile für Zeile liest und jede Zeile in eine ArrayList gebildet wird, also kann ich auf jedes Zeichen zurückgreifen. Was mache ich falsch?

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); 
    } 
} 

Ich bin dabei, meine Augäpfel zu stochern. Ich habe drei Fehler:

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) { 
             ^

Was mache ich falsch?

Antwort

13

Wenn Sie die meiste Zeit mit I/O in Java arbeiten, müssen Sie IOException behandeln, die jederzeit beim Lesen/Schreiben oder sogar beim Schließen des Streams auftreten kann.

Sie müssen Ihren sensiblen Block in einen try // catch-Block setzen und die Ausnahme behandeln.

Zum Beispiel:

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

Ressourcen:

+0

hinzugefügt habe, wie mache ich das aber? – Luron

+0

Lesen Sie das Tutorial für die Beispiele. – camickr

8

Java prüft Ausnahme Spezifikationen bei der Kompilierung. Sie müssen entweder die Ausnahme abfangen oder sie in Ihrer Methodensignatur auslösen. Hier ist, wie Sie sich erklären, dass es aus Ihrer Methode ausgelöst werden können:

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

Fangen Sie die Ausnahme, wenn Ihre Methode etwas in Reaktion tun muss. Erklären Sie es als geworfen, wenn Ihr Anrufer über den Fehler informiert werden muss.

Diese schließen sich nicht gegenseitig aus. Manchmal ist es nützlich, die Ausnahme abzufangen, etwas zu tun und die Ausnahme erneut zu werfen oder eine neue Ausnahme, die das Original umhüllt (die "Ursache").

RuntimeException und ihre Unterklassen müssen nicht deklariert werden.

0

Gute IDEs erstellen entweder den catch-Block für Sie oder fügen die Ausnahme zur Methodendeklaration hinzu.

Beachten Sie, dass jede Methode, die Ihre Methode aufruft, wenn Sie die Ausnahmen zur Methodendeklaration gemäß Colins Lösung hinzufügen, auch einen geeigneten catch-Block haben muss oder die Ausnahme in der Methodendeklaration deklarieren muss.

-3

Ich hatte das gleiche Problem. Ich habe es gelöst, indem ich die Spring-Bibliothek "org.springframework.core"

Verwandte Themen