如果捕获,Java NumberFormatException将停止工作

时间:2015-10-14 21:08:35

标签: java exception-handling numberformatexception

更新:对不起误导你们中的一些人,这里有更详细的代码:

我试图将String[]数组解析为int[]数组。我从JTextArea获取字符串,生成String[],然后int[]

      array1String="asd, lala, 22";
      array2String="1,2,3";

      String [] arr1 = array1String.split(",");
      String [] arr2 = array2String.split(",");

      int[] array1 = new int[arr1.length];
      for (int i=0; i<arr1.length; i++) {
       try {
           array1[i] = Integer.parseInt(arr1[i]);
          } catch (Exception ex) {
            resultLabel.setText(ex.getMessage());
          }
       }

       int[] array2 = new int[arr2.length];
       for (int i=0; i<arr2.length; i++) {
           try {
              array2[i] = Integer.parseInt(arr2[i]);
           } catch (Exception ex) {
              resultLabel.setText(ex.getMessage());
           }
        }

parseInt()方法将任何乱码解释为&#34; 0&#34;。因此,不是获得异常,而是将每个对应于gibberish String []成员的int []成员作为ZERO。但这不是我想要的。我想捕获异常以将消息传递给JLabel。我不想让它愉快地吃任何废话并使它成为&#34; 0&#34;。我错过了什么吗?我怀疑这不应该如何起作用。

结果数组看起来像

array1 [0,0,22]
array2 [1,2,3].

没有什么可以去Label,好像异常从未发生过。由于我没有更改代码,只处理异常更改。

3 个答案:

答案 0 :(得分:2)

设置JLabel文本的代码丢失了,但我猜它是在try-catch-block之后,只使用x的值,默认为0。这个问题的首选解决方案是更新try-catch-block中的文本,如下所示:

try{
    int x = ...
    resultLabel.setText("" + x);
}catch(Exception ex){
    resultLabel.setText(ex.getMessage());
}

一般情况下,如果生成数据可能会抛出异常,建议处理try-catch-block中的数据,从而生成数据。

编辑:
此代码存在一个简单问题:int没有undefined值之类的任何属性。最简单的方法是使用Integer[]代替null作为undefined - 值:

Integer x;
try{
    x = ...;
}catch(Excpetion ex){
    resultLabel.setText(ex.getMessage());
    x = null;
}

答案 1 :(得分:1)

int的默认值为0.由于得到异常并且没有为x分配任何内容,因此得到0

答案 2 :(得分:0)

首先,如果你在TRY块中使用int x = Integer.parseInt(str);,那么这意味着你的x成为TRY块的局部变量,你不能在TRY之外使用它,甚至不能在CATCH块中使用它。因此,如果发生异常,x=0的问题甚至不会发生,因为x会失去其范围。

如果你在TRY块之外声明x以便你可以在CATCH内部或在TRY块之外使用它),那么你已经初始化它( ofcourse with value如0或-1 )那么x=0x=-1应该是x的预期值

您的关注:

  

我想捕获异常以将消息传递给JLabel。

考虑以下方法,您将捕获异常,计算错误消息,然后将/设置传递到您的标签字段等。

与其他方法相比,此方法的

优势是您需要重复resultLabel.setText()的代码,您正在使用成功消息或失败消息更新您的labelMessage使用它。

如果这不能完全解决您的问题,请随时告诉我。

    String labelMessage = null;
    String str = "asd";
    try {
        int x = Integer.parseInt(str);
        labelMessage = //Whatever you want...
    } catch (NumberFormatException e) {
        e.printStackTrace();
        labelMessage = "Error message = " + e.getMessage();  // OR some other menaingful message you want
    }
    //Set to you label field...