it-swarm.com.de

Fehlermeldung "Nicht gemeldete Ausnahme Java.io.IOException; muss abgefangen oder zum Abwurf deklariert werden"

Error:

filecontent.Java:15: nicht gemeldete Ausnahme Java.io.IOException; muss sein gefangen oder für geworfen erklärt

showfile (); ^ filecontent.Java:78: nicht gemeldete Ausnahme Java.io.IOException; muss gefangen oder als .__ deklariert werden. geworfen

showfile (); ^

Ich habe bereits Java.io.IOException geworfen, zeigt aber immer noch diese Fehler.

Mein Code:

import Java.awt.*;
import Java.awt.event.*;
import Java.io.*;

class filecontent extends Frame implements ActionListener
{
    TextField t[] = new TextField[4];
    TextArea ta[] = new TextArea[4];
    Button submit;
    Panel p1;
    filecontent()
    {
        setGUI();
        setRegister();
        showfile();
        setTitle("FileData");
        setVisible(true);
        setSize(300, 300);
        /*  addWindowListener(new WindowAdapter()
            { 
                public void windowClosing(WindowEvent we)
                { 
                    System.exit(0); 
                }
            }); 
        */

    }

    void setGUI()
    {
        p1 = new Panel();
        p1.setLayout(new GridLayout(5, 4, 10, 10));
        for(int i=0; i<4; i++)
        {
            t[i] = new TextField(10);
            ta[i] = new TextArea("");
            p1.add(t[i]);
            p1.add(ta[i]);
        }
        submit = new Button("Submit");
        p1.add(submit);
    }

    void setRegister()
    {
        submit.addActionListener(this);
    }

    void showfile() throws Java.io.IOException
    {
        FileReader fin[] = new FileReader[4];
        FileReader fn;
        //   br[]=new BufferedReader[4];

        for(int i=0;i<4;i++)
        {
            fin[i]=new FileReader(t[i].getText());
        }
        int cnt = 1;
        String s;
        fn = fin[0];
        BufferedReader br = new BufferedReader(fn);
        while(cnt <= 4)
        {
            if((s=br.readLine()) != null)
            {
                ta[cnt-1].append(s+"");
            }
            else
            {
                cnt++;
                fn = fin[cnt-1];
                ta[cnt-1].setText("");
            }
        }
    }

    public void actionPerformed(ActionEvent ae)
    {
        if(ae.getSource()==submit)
        {
            showfile();
        }
    }

    public static void main(String ar[])
    {
        new filecontent();
    }
}
20
Akash Patel
void showfile() throws Java.io.IOException  <-----

Ihre showfile()-Methode wirft IOException. Wenn Sie sie also verwenden, müssen Sie entweder diese Ausnahme abfangen oder erneut ausführen. So etwas wie:

try {
  showfile();
}
catch(IOException e) {
  e.printStackTrace();
}

Sie sollten etwas über Ausnahmen in Java lernen.

42
Harry Joy

Die Fehlermeldung bedeutet, dass jede Methode, die showfile() aufruft, deklarieren muss, dass it wiederum IOException auslöst, oder dass der Aufruf innerhalb eines try-Blocks erfolgen muss, der IOException abfängt. Wenn Sie showfile() aufrufen, führen Sie keine der beiden Aktionen aus. Ihr filecontent-Konstruktor deklariert beispielsweise weder IOException noch enthält er einen try-Block.

Die Absicht ist, dass eine Methode sollte irgendwo einen try-Block enthalten und diese Ausnahme abfangen und behandeln. Der Compiler versucht, Sie zu zwingen, die Ausnahme irgendwo.Zu behandeln.

Im Übrigen ist dieser Code (leider so stumpf) schrecklich. Sie schließen keine der Dateien, die Sie öffnen, die BufferedReader zeigt immer auf die erste Datei, auch wenn Sie versuchen, sie auf eine andere zu verweisen. Die Schleifen enthalten abweichende Fehler, die verschiedene Ausnahmen verursachen. usw. Wenn Sie do zum Kompilieren erhalten, wird not wie erwartet funktionieren. Ich denke, du musst etwas langsamer werden.

Ausnahmen sprudeln in den Stapel. Wenn ein Aufrufer eine Methode aufruft, die eine geprüfte Ausnahmebedingung wie IOException auslöst, muss er die Ausnahmebedingung entweder abfangen oder selbst auslösen.

Im Falle des ersten Blocks:

filecontent()
{
    setGUI();
    setRegister();
    showfile();
    setTitle("FileData");
    setVisible(true);
    setSize(300, 300);

    /*
        addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent we)
            {
                System.exit(0);
            }
        });
    */
}

Sie müssten einen try catch-Block hinzufügen:

filecontent()
{
    setGUI();
    setRegister();
    try {
        showfile();
    }
    catch (IOException e) {
        // Do something here
    }
    setTitle("FileData");
    setVisible(true);
    setSize(300, 300);

    /*
        addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent we)
            {
                System.exit(0);
            }
        });
    */
}

Im Falle des zweiten:

public void actionPerformed(ActionEvent ae)
{
    if (ae.getSource() == submit)
    {
        showfile();
    }
}

Sie können keine IOException von dieser Methode auslösen, da ihre Signatur von der Schnittstelle bestimmt wird. Daher müssen Sie die Ausnahme innerhalb folgender Punkte erfassen:

public void actionPerformed(ActionEvent ae)
{
    if(ae.getSource()==submit)
    {
        try {
            showfile();
        }
        catch (IOException e) {
            // Do something here
        }
    }
}

Denken Sie daran, dass die showFile () -Methode die Ausnahme auslöst. Das ist das, was das Schlüsselwort "wirft" anzeigt, dass die Methode diese Ausnahme auslösen kann. Wenn die showFile () -Methode ausgelöst wird, muss der Code, den die Methode aufrufen muss, abgefangen werden, oder die Ausnahme wird explizit ausgelöst, indem derselbe IOException-Zusatz zur Methodensignatur hinzugefügt wird, sofern dies zulässig ist.

Wenn die Methode eine in einer Schnittstelle oder Superklasse definierte Methodensignatur überschreibt, die nicht auch erklärt, dass die Methode diese Ausnahmebedingung auslösen kann, können Sie nicht angeben, dass eine Ausnahmebedingung ausgelöst wird.

6
PlexQ

Ihre Methode showFile () erklärt, dass eine IOException ausgelöst werden kann. Da es sich um eine geprüfte Ausnahme handelt, muss bei jedem Aufruf der showFile () - Methode die Ausnahme irgendwie behandelt werden. Eine Option besteht darin, den Aufruf von showFile () in einen try-catch-Block zu hüllen.

 try {
     showFile();
 }
 catch(IOException e) {
    // Code to handle an IOException here
 }
1

Wenn der Angerufene eine Ausnahme auslöst, d. H. void showfile () löst Java.io.IOException aus , sollte der Aufrufer damit umgehen oder es erneut werfen.

Und lernen Sie auch Namenskonventionen. Ein Klassenname sollte mit einem Großbuchstaben beginnen.

0