我很难从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.
}
如果我在方法中抛出异常,我就可以工作。
答案 0 :(得分:2)
Java中有两种类型的异常:已检查(即,您被迫捕获它们)并且未经检查(您不必强制捕获它们)。取消选中RuntimeException
和Error
的子类,同时考虑检查其他异常的子类。要缓解代码中的问题,请更改行
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方法不会抛出您的自定义异常,这就是您收到错误的原因。
我希望这会有所帮助。