Java中匿名内部类的异常处理

时间:2012-05-22 05:05:19

标签: java exception

我很难从Anonymous Inner类处理我自己的异常,它是Action侦听器的一部分。

以下是我自己的例外:

class Register extends Exception
{
    String Error;
    public Register() 
    {
    Error = new String("Register Exception");
}
}

下面给出的方法是鼠标监听器中的另一个类。

public void Gui() throws Register
{
    jButton.addMouseListener(new MouseAdapter() 
    {
        public void mouseClicked(MouseEvent e) 
        {
                throw new Register();    //Unhandled exception type Register
         }          
     });
     throw new Register();   // This works fine.
}

如果我在方法中抛出异常,我就可以工作。

3 个答案:

答案 0 :(得分:2)

Java中有两种类型的异常:已检查(即,您被迫捕获它们)并且未经检查(您不必强制捕获它们)。取消选中RuntimeExceptionError的子类,同时考虑检查其他异常的子类。要缓解代码中的问题,请更改行

class Register extends Exception

class Register extends RuntimeException

答案 1 :(得分:0)

与评论中提到的@Mortiz一样,mouseClicked()没有throws子句。您需要在mouseClicked()中处理异常。

如果您希望解决编译器错误,这是一个糟糕的想法,您可以让Register扩展RuntimeException。但是,这可能不是你想要的。 Gui()方法永远不会捕获mouseClicked()引发的异常,因为Gui()不是调用方。 mouseClicked()由Swing事件处理类调用。

您遇到的是设计问题。如果我正确阅读,你想要处理响应输入事件而抛出的异常;而且你期待一个长度恢复操作。在这种情况下,您应该向用户提供反馈并在mouseClicked()

中触发线程以进行恢复操作

答案 2 :(得分:0)

查看代码,在从mouseClicked方法抛出自定义异常时,您将收到编译时错误,这是因为该方法没有抛出自定义异常。

您可以通过以下两种方式之一处理异常 - 1)使用try - catch 2)或者让你的方法抛出你的自定义异常。

在您的方案中,mouseClicked方法不会抛出您的自定义异常,这就是您收到错误的原因。

我希望这会有所帮助。