当我点击“ 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);
}
}
}
答案 0 :(得分:0)
在类SaveButtonAction
中,您将实现actionPerformed
方法,该方法在ActionListener
接口中定义。
如果检查源代码,您会发现ActionListener#actionPerformed
的签名中没有引发任何异常。然而,当您实现它时,您将执行对Oval#save
的调用,并引发IOException
。尝试这样做时,可以在方法的签名中添加一个throws
子句,从而对其进行更改。
这有效地破坏了接口定义的契约,并导致您的问题中提到的错误。
要么丢失throws
子句,然后在内部处理该异常,要么,如果您对此有兴趣,请将其包装在未经检查的异常中,然后将其重新抛出。
我也强烈建议您阅读有关实现接口的正确方法。似乎您在那个领域缺乏。