web-dev-qa-db-fra.com

Message d'erreur "Exception non signalée Java.io.IOException; doit être interceptée ou déclarée comme étant levée"

Erreur:

filecontent.Java:15: exception non signalée Java.io.IOException; doit être attrapé ou déclaré être jeté

showfile (); ^ filecontent.Java:78: exception non signalée Java.io.IOException; doit être attrapé ou déclaré comme étant jeté

showfile (); ^

J'ai déjà levé Java.io.IOException, mais cela indique quand même ces erreurs.

Mon 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  <-----

Votre méthode showfile() jette IOException. Ainsi, chaque fois que vous l’utilisez, vous devez intercepter cette exception ou la réexaminer. Quelque chose comme:

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

Vous devriez en savoir plus sur exceptions en Java .

42
Harry Joy

Le message d'erreur signifie que toute méthode qui appelle showfile() doit déclarer que it, à son tour, jette IOException, ou que l'appel doit être contenu dans un bloc try. qui attrape IOException. Lorsque vous appelez showfile(), vous ne faites rien de tout cela. Par exemple, votre constructeur filecontent ne déclare pas IOException ni ne contient de bloc try.

L'intention est qu'une méthode, quelque part, devrait contienne un bloc try, et intercepte et gère cette exception. Le compilateur essaie de vous forcer à gérer l'exception quelque part.

En passant, ce code est (désolé d'être aussi direct) horrible. Vous ne fermez aucun des fichiers que vous avez ouverts, la BufferedReader pointe toujours sur le premier fichier, même si vous semblez vouloir le faire pointer vers un autre, les boucles contiennent des erreurs causer diverses exceptions, etc. Lorsque vous faites faites-le compiler, cela va ne pas fonctionner comme vous le souhaitez. Je pense que vous devez ralentir un peu.

7

Les exceptions bouillonnent dans la pile. Si un appelant appelle une méthode qui lève une exception vérifiée, comme IOException, il doit également intercepter l'exception ou la lancer elle-même.

Dans le cas du premier bloc:

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

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

Vous devez inclure un bloc catch catch:

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

Dans le cas du second:

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

Vous ne pouvez pas lancer IOException à partir de cette méthode car sa signature est déterminée par l'interface, vous devez donc capturer l'exception dans:

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

N'oubliez pas que la méthode showFile () lève l'exception. c'est ce que le mot clé "throws" indique que la méthode peut lever cette exception. Si la méthode showFile () émet, alors, quel que soit le code appelé par cette méthode, elle-même doit intercepter l’exception de manière explicite en incluant les mêmes levés, en plus de l’exception IOException, si elle est autorisée.

Si la méthode substitue une signature de méthode définie dans une interface ou une superclasse qui ne déclare pas également que la méthode peut générer cette exception, vous ne pouvez pas le déclarer comme générant une exception.

6
PlexQ

Votre méthode showFile () déclare qu'elle peut déclencher une exception IOException. Comme il s'agit d'une exception vérifiée, tout appel à la méthode showFile () doit gérer l'exception d'une manière ou d'une autre. Une option consiste à encapsuler l'appel à showFile () dans un bloc try-catch.

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

Lorsque l'appelé lève une exception, par exemple, void showfile () lève Java.io.IOException l'appelant doit la gérer ou la relancer.

Et aussi apprendre les conventions de nommage. Un nom de classe doit commencer par une lettre majuscule.

0
Balaswamy Vaddeman