2009-04-09 67 views
1

如果我的代码是正确的,可以让我知道吗?我在两个小时内为我的测试学习,所以我没有时间写一个应用程序来测试它。Java中的简单异常处理

问题是:如果我有一个数字作为其标签的JLabel。例如,只是一个标有34的标签。我想从标签中提取数字。但我需要处理例外情况,即它不是数字,它可以是一封信。

下面我的代码会正确处理异常吗?

JLabel label = new JLabel("34"); 
int extracted; 

这就是我会做

try{ 
    extracted = Integer.parseInt(extracted.getText()); 
    System.out.println("the number was: "+ extracted); 
} 
catch(IOException exception){ 
    System.out.println(label.getText() + " is not a number"); 
} 

回答

8

关闭,但赶上一个IOException将无法工作,因为该异常类型不被parseInt函数()方法抛出。尝试捕捉NumberFormatException异常,而不是:

try{ 
    extracted = Integer.parseInt(extracted.getText()); 
    System.out.println("the number was: "+ extracted); 
} catch(NumberFormatException exception) { 
    System.out.println(label.getText() + " is not a number"); 
} 
+0

由于这是正确的 – user69514 2009-04-09 16:10:21

6

我会检查Integer.parseInt()

此外,文档,我强烈建议设立以任何IDE测试项目中,使用这样你可以通过快速周转来测试这些东西!即使它是一个vim/javac + make脚本。

2

这几乎是正确的,只是你赶上了错误的除外; parseInt()引发NumberFormatException。

0

javadoc for Integer.parseInt()指出它可以抛出一个NumberFormatException异常,而不是一个IOException。

你写不会编译,因为IOException异常是经过检查的异常,不能由任何try块代码抛出的代码。

1

NumberFormatException的是一个RuntimeException(没有),编译的目的,你真的没有把它写在制动部分。

如果您要做的是确定用户是否在JTextField中输入数字(而不是其他任何字符),您应该查看正则表达式(正则表达式),而不是使用try来捕获这个数字。捕获机制。

+0

为什么在地球上,你会想这样做?正则表达式的GOT要慢一些,肯定会更易出错。您将失去国际化和内置实施为您提供的其他任何内容。尽管测试会比例外更好,但任何事情都比正则表达式更好 – 2009-04-09 17:43:19