我花了好几个小时试图找出我的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);
}
}
我尝试了一个更基本的例子,它似乎工作。也许问题出在代码的其他方面。这是我用过的东西:
主要方法:
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);
}
}
不确定为什么你会在同一个方法中抛出/捕获异常。
异常处理相对昂贵,应尽可能避免。在您的简单示例中,您只是尝试显示警报消息。这可以很容易地在“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);
}
}
}
在学习新概念时,更容易从简单的代码开始并使其工作,然后将知识应用于您的实际应用程序。此问题可能是由验证逻辑引起的。