java - 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);
}
}
}
解决方案
在您的类SaveButtonAction
中,您实现接口actionPerformed
中定义的方法。ActionListener
如果您检查源代码,您会发现ActionListener#actionPerformed
它的签名中不会引发任何类型的异常。然而,当您实现它时,您会执行一个调用,Oval#save
该调用会抛出IOException
. 尝试这样做时,您会throws
在方法的签名中添加一个子句,从而对其进行更改。
这有效地破坏了接口定义的合同并导致您的问题中提到的错误。
要么丢失throws
子句并在内部处理异常,要么如果您对它非常感兴趣,请将其包装在未经检查的异常中并重新抛出它。
我还强烈建议阅读有关实现接口的正确方法。看来你在这方面欠缺。
推荐阅读
- jenkins - UFT - UFT 测试结果与 Jenkins Stage View 不同
- python - 在用户定义的函数中应用函数以四舍五入
- javascript - ER_ACCESS_DENIED_NO_PASSWORD_ERROR 表示混淆
- mysql - Laravel 关系属于到哪里有
- arrays - 矩阵的滑动窗口求和
- apache-kafka - 如何在 jdbc-sink-connector 模式信息中指定数据类型“日期”?
- python - 变量中的 Python.py 文件数学
- ruby - 找不到 gem capistrano 的可执行上限
- angular - 在调用 api 之前检查 ngrx 效果中的存储数据时遇到问题
- java - Java Thymeleaf:将数据从一个表单获取到另一个表单,然后在提交时使用两者的数据