如何在Java中使用自定义异常?我已经按照步骤进行了操作但是没有让我的catch子句工作

问题描述 投票:0回答:2

我花了好几个小时试图找出我的java异常处理有什么问题。我跟踪了所有的书籍和网站,创建了海关异常,扔掉它们,并试图抓住它们。他们正在扩展RuntimeException(因为它们被抛入ActionEvent)所以我不认为throws子句需要在方法头中声明。但是catch条款不会运行。这是相关的代码:

public void handle(ActionEvent event){
        Object selectedButton = event.getSource();
        if (selectedButton == b1)
        {
            String passwordStr1 = password1.getText(); 
            String passwordStr2 = password2.getText();
            {
                if(passwordStr1.equals(passwordStr2))
                {

                if(PasswordCheckerUtility.isValidPassword(passwordStr1)== true)
                    {
                        Alert validAlert = new Alert(AlertType.INFORMATION);
                        validAlert.setTitle("Password Status");
                        validAlert.setHeaderText("Password is valid");
                        validAlert.showAndWait();
                    }


              else
                try
                {
                    throw new UnmatchedException("The passwords do not match");
                }
                catch(UnmatchedException ue) {
                    Alert unEAlert = new Alert(AlertType.ERROR);
                    unEAlert.setTitle("Password Status");
                    unEAlert.setContentText(ue.getMessage());
                }
            }
        }

public class UnmatchedException extends RuntimeException{

    public UnmatchedException(String message)
    {
        super(message);
    }

}
java exception try-catch
2个回答
1
投票

我尝试了一个更基本的例子,它似乎工作。也许问题出在代码的其他方面。这是我用过的东西:

主要方法:

public static void main(String...args){
    handle(null);
}//main()

句柄方法:

public static void handle(ActionEvent event){
    try {
        throw new UnmatchedException("The passwords do not match");
    } catch(UnmatchedException ue) {
        System.out.println(ue.getMessage());
    }
}

以及单独类中的自定义异常:

public class UnmatchedException extends RuntimeException{
    private static final long serialVersionUID = 1L;

    public UnmatchedException(String message)
    {
        super(message);
    }
}

1
投票

不确定为什么你会在同一个方法中抛出/捕获异常。

异常处理相对昂贵,应尽可能避免。在您的简单示例中,您只是尝试显示警报消息。这可以很容易地在“else语句”中完成。

当您希望调用该方法的代码处理异常时,我通常只会抛出异常。

在任何情况下,以相同的方法抛出和捕获异常对我来说很好:

public class ExceptionTest
{
    public static void main(String[] args)
    {
        validate("hello there");
        validate("bye");
    }

    public static void validate(String text)
    {
        if (text.length() > 7)
            System.out.println("everythings good");
        else
        {
            try
            {
                if (text.length() < 8)
                    throw new StringTooShortException("Must be at least 8 characters");
            }
            catch (StringTooShortException e)
            {
                System.out.println(e);
            }
        }
    }

    static class StringTooShortException extends RuntimeException
    {
        public StringTooShortException(String message)
        {
            super(message);
        }
    }
}

在学习新概念时,更容易从简单的代码开始并使其工作,然后将知识应用于您的实际应用程序。此问题可能是由验证逻辑引起的。

© www.soinside.com 2019 - 2024. All rights reserved.