首页 > 解决方案 > java.awt.event.ActionListener不抛出IOException错误如何解决?

问题描述

我试图在我的按钮“SaveImage”单击它时将我的数据保存到给定的文件名中。当我尝试运行我save(PrintWriter write)的 ActionListener 时,它显示错误。

我的堆栈跟踪

actionPerformed (java.awt.event. ActionEvent) in
Oval.SaveButtonAction Cannot implement
actionPerformed(java.awt.event.ActionEvent) in
java.awt.event.ActionListener
overridden method does not throw java.io.IOException

这是我的代码。

public class Oval extends JPanel 
{


 private String filename = "";
    private PrintWriter writer;

public Oval() throws IOException
    {
        Buttons();      

    }

public void save(PrintWriter writer) throws IOException // this is my save method....
    {

        for(int i=0;i<ovalColor.size();i++)
        {
            writer.println(ovalX.get(i)+","+ovalY.get(i)+","+ovalColor.get(i).getRGB());
        }
    }

String filename  = "123.txt"
writer = new PrintWriter(filename);

/**
     * Action Listener for saveImage button
     */
class SaveButtonAction implements ActionListener  
    {
        public void actionPerformed(ActionEvent e) throws IOException // here i am getting Exception error
        {
            save(writer);
        }
    }
}

标签: javaactionlistenerioexception

解决方案


在您的类SaveButtonAction中,您实现接口actionPerformed中定义的方法。ActionListener

如果您检查源代码,您会发现ActionListener#actionPerformed它的签名中不会引发任何类型的异常。然而,当您实现它时,您会执行一个调用,Oval#save该调用会抛出IOException. 尝试这样做时,您会throws在方法的签名中添加一个子句,从而对其进行更改。

这有效地破坏了接口定义的合同并导致您的问题中提到的错误。

要么丢失throws子句并在内部处理异常,要么如果您对它非常感兴趣,请将其包装在未经检查的异常中并重新抛出它。

我还强烈建议阅读有关实现接口的正确方法。看来你在这方面欠缺。


推荐阅读