使用actionPerformed失败,因为其中的方法可以抛出异常

时间:2010-12-16 19:32:05

标签: java

解决了!谢谢大家的快速解答,问题是,我认为如果你捕获一个异常,你仍然需要添加抛出异常的标题 ^^非常愚蠢我,再次感谢! ------------------------------------ ORIGINAL POST ------- 你好, 我有一个方法load(),这个方法抛出IOException。 我想做到这一点:

    public void actionPerformed(ActionEvent e){
       if(e.getActionCommand().equals("Load")){
           load();
       }
    }

问题是,我应该向actionPerformed添加抛出IOException,但是如果我这样做的话。 我得到一个错误说:“该类未被声明为抽象或未覆盖public void actioPerformed()

4 个答案:

答案 0 :(得分:2)

所以如果load抛出IOException,你需要弄清楚你想要发生什么。方法调用 actionPerformed并不期望IOException,因此无法处理它。

你可以处理吗,例如通过显示错误消息并让用户再试一次?如果是这样,请在try/catch中放置一个actionPerformed块并以此方式处理。

如果你不能,你可以捕获异常并将其包装在RuntimeException中。这通常是处理异常的相当苛刻的方式,但在某些情况下,这是最好的方法。 Swing将捕获异常并将其记录下来,因此在这种情况下它可能没什么帮助......但您也可以更改该默认行为。

答案 1 :(得分:1)

是否有理由不能通过load() - try块简单地将catch的呼叫包围起来?例如:

public void actionPerformed(ActionEvent e) {
    if(e.getActionCommand().equals("Load")) {
        try {
            load();
        } catch(IOException e) {
            // Handle the error here
        }
    }
}

这假设您在load()失败时可以执行某些行为。 load()做了什么?如果无法加载,您的应用程序应该怎么做?

答案 2 :(得分:0)

您需要抛出IOException,还是使用try / catch包围执行的方法(可能是getActionCommand()?)。

答案 3 :(得分:0)

您必须考虑如何在IOException的上下文中处理actionPerformed()

一种方法是使用try / catch块,并在catch中显示一个对话框,告诉用户出现了问题。如果你能将异常翻译成有意义的东西,那就更好了,如果你能给用户一些方法来解决这个问题,那就更好了。

顺便说一句,如果你正在进行一些长时间运行的IO操作,你不应该在事件调度线程上这样做 - 它会导致你的GUI出现延迟。而不是在多个动作之间共享一个ActionListener(使用if条件来查看您被调用的动作),为每个动作创建一个AbstractAction的子类。