Vraag Foutbericht "niet-gemelde uitzondering java.io.IOException; moet worden gevangen of verklaard te worden gegooid "


Fout:

filecontent.java:15: niet-gemelde uitzondering java.io.IOException; moet zijn   gepakt of        verklaard te worden gegooid

showfile ();                               ^ filecontent.java:78: niet-gemelde uitzondering java.io.IOException; moet worden gevangen of verklaard   gegooid

showfile ();                               ^

Ik heb java.io.IOException al gegooid, maar het toont nog steeds deze fouten.

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

15
2018-01-03 04:25


oorsprong


antwoorden:


void showfile() throws java.io.IOException  <-----

Jouw showfile() methode gooit IOException, dus wanneer je het gebruikt, moet je die uitzondering vangen of opnieuw ingeven. Zoiets als:

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

Je moet leren over uitzonderingen op Java.


33
2018-01-03 04:29



Het foutbericht betekent dat elke methode die wordt aangeroepen showfile() moet dat verklaren hetop zijn beurt gooit IOException, of de oproep moet in een try blok dat vangt IOException. Wanneer je belt showfile(), je doet geen van beide; bijvoorbeeld uw filecontent constructeur verklaart niet IOException noch bevat een try blok.

De bedoeling is dat een methode, ergens, moeten bevatten een try blokkeren en deze uitzondering opvangen en verwerken. De compiler probeert je te dwingen om met de uitzondering om te gaan ergens.

Trouwens, deze code is (sorry om zo bot te zijn) verschrikkelijk. U sluit geen van de bestanden die u opent, de BufferedReader wijst altijd naar het eerste bestand, ook al lijkt u te proberen om het naar een ander te wijzen, de lussen bevatten off-by-one fouten die verschillende uitzonderingen veroorzaken, etc. Wanneer u do Laat dit compileren, het zal niet werken zoals je verwacht. Ik denk dat je een beetje moet vertragen.


8
2018-01-03 04:29



Uitzonderingen bubbelen de stapel. Als een beller een methode aanroept die een gecontroleerde uitzondering genereert, zoals IOException, moet deze ook de uitzondering vangen of zelf weggooien.

In het geval van het eerste blok:

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

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

Je zou een try catch-blok moeten toevoegen:

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

In het geval van de tweede:

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

Je kunt IOException niet van deze methode gooien omdat de handtekening wordt bepaald door de interface, dus je moet de uitzondering binnenhalen:

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

Vergeet niet dat de methode showFile () de uitzondering weggooit; dat is wat het sleutelwoord "worpen" aangeeft dat de methode die uitzondering kan gooien. Als de methode showFile () wordt gegooid, moet de code die die methode aanroept de expliciete aanval uitvoeren of zelf de uitzondering expliciet toevoegen door dezelfde toevoeging aan IOException aan de handtekening van de methode toe te voegen, als dit is toegestaan.

Als de methode een ondertekening van een methode overschrijft die is gedefinieerd in een interface of superklasse die niet ook verklaart dat de methode die uitzondering kan genereren, kunt u niet aangeven dat deze een uitzondering moet genereren.


5
2018-01-03 04:35



Uw methode showFile () verklaart dat het een IOException kan gooien. Aangezien dit een gecontroleerde uitzondering is, moet elke aanroep van de methode showFile () de uitzondering op de een of andere manier afhandelen. Een optie is om de aanroep naar showFile () in een try-catch-blok te wikkelen.

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

1
2018-01-03 04:29



Wanneer de persoon een uitzondering werpt, d.w.z. void showfile () gooit java.io.IOException de beller zou het moeten afhandelen of opnieuw gooien.

En leer ook naamgevingsconventies. Een klassenaam moet beginnen met een hoofdletter.


0
2018-01-03 04:41