0

我在处理我自己的来自匿名内部类的异常时遇到了困难,该类是动作侦听器的一部分。

下面给出的是我自己的例外:

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.
}

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

4

3 回答 3

2

Java 中有两种类型的异常:已检查(即,您被迫捕获它们)和未检查(您不必强制捕获它们)。RuntimeException和的子类Error未检查,而其他异常的子类被视为已检查。要缓解代码中的问题,请更改行

class Register extends Exception

class Register extends RuntimeException
于 2012-05-22T05:16:52.853 回答
0

就像评论中建议的@Mortiz 一样,mouseClicked() 没有throws子句。您需要处理 mouseClicked() 内部的异常。

如果你想通过编译器错误来获取,这是一个糟糕的主意,你可以Register扩展RuntimeException. 但是,这可能不是您想要的。Gui()方法永远不会捕获mouseClicked()因为Gui()不是调用者而引发的异常。mouseClicked()由 Swing 事件处理类调用。

你遇到的是一个设计问题。如果我没看错,您想处理响应输入事件而引发的异常;并且您期望进行长度恢复操作。在这种情况下,您应该向用户提供反馈并在mouseClicked().

于 2012-05-22T05:34:42.930 回答
0

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

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

在您的场景中,mouseClicked 方法不会引发您的自定义异常,这就是您收到错误的原因。

我希望这会有所帮助。

于 2012-05-22T05:36:36.287 回答