我的项目中有以下代码片段,工作正常。我试图将PropertyVetoException传播回调用者。删除try-catch块并写入public void actionPerformed(ActionEvent e)throws PropertyVetoException
会产生编译错误。为什么会如此。?如何将异常传播回调用者。我知道事件生成方法不是'调用者',但我想将异常传播到此事件生成方法,指示已发生异常并采取纠正措施。
public void actionPerformed(ActionEvent e) {
if(CMD_CHILD.equalsIgnoreCase(e.getActionCommand())) {
if(child.getTitle().equalsIgnoreCase(title)) {
try {
child.setSelected(true);
} catch (PropertyVetoException e1) {
e1.printStackTrace();
}
}
}
}
答案 0 :(得分:4)
由于actionPerformed
接口指定了ActionListener
,并且在该接口中,没有throws
表示该方法可能会抛出任何已检查的异常。
当从超类重写方法或从接口实现方法时,覆盖或实现方法不会抛出超出超类或接口中指定的异常。
除此之外,你为什么要这样做? actionPerformed
由Swing GUI框架调用,您希望Swing对异常做什么?
答案 1 :(得分:4)
您正在实现的接口(ActionListener
)未声明方法actionPerformed
的异常。您无法在该接口的实现类中更改方法签名。
如果要将异常抛出到事件生成器,则可以将其转换为RuntimeException
,而不需要在方法签名中声明。
} catch (PropertyVetoEception e1) {
throw new RuntimeException(e1);
}
当然,RuntimeException
有点通用,您可以定义自己的特定于应用程序的异常,例如:
public class EventExecutionException extends RuntimeException {
...
}