错误消息“未报告的异常 java.io.IOException;必须被抓住或被宣布被抛出”

2022-09-01 05:42:54

错误:

filecontent.java:15: unreport exception java.io.IOException;必须被捕获或声明被抛出

showfile();^ filecontent.java:78: unreported exception java.io.IOException;必须被捕获或声明被抛出

showfile();^

我已经抛出了java.io.IOException,但它仍然显示了这些错误。

我的代码:

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

答案 1
void showfile() throws java.io.IOException  <-----

你的方法会引发 ,所以每当你使用它时,你必须要么捕获该异常,要么再次删除它。像这样:showfile()IOException

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

您应该了解 Java 中的异常


答案 2

异常会冒泡到堆栈中。如果调用方调用引发已检查异常的方法(如 IOException),则它还必须捕获异常或自身引发异常。

在第一个块的情况下:

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

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

您必须包含一个 try 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);
            }
        });
    */
}

在第二种情况下:

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

您无法从此方法引发 IOException,因为其签名由接口确定,因此您必须在以下位置捕获异常:

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

请记住,showFile() 方法正在引发异常;这就是“throws”关键字所指示的方法可能会引发该异常。如果 showFile() 方法正在引发,则无论调用该方法的任何代码都必须捕获,或者如果允许,则通过向方法签名包含相同的 throws IOException 来显式引发异常。

如果该方法重写在接口或超类中定义的方法签名,而该接口或超类未同时声明该方法可能引发该异常,则无法声明该方法以引发异常。


推荐