如何解决java.awt.event.ActionListener不抛出IOException错误?

时间:2019-03-13 03:46:53

标签: java 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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

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

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

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

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

我也强烈建议您阅读有关实现接口的正确方法。似乎您在那个领域缺乏。