【问题标题】:Value in TextField throws java.lang.NumberFormatException errorTextField 中的值引发 java.lang.NumberFormatException 错误
【发布时间】:2012-12-01 02:11:22
【问题描述】:

这就是我的代码(当然,还没有完成,因为我不想做任何其他工作,直到我弄清楚为什么会出现错误)。它编译没有问题,但是当我尝试运行它时,我的第一行得到了一个 java.lang.NumberFormatException,不知道为什么?

 if (Integer.parseInt(subtotalTextField.getText()) <= 200)
 {
    discountTextField.setText("2");
 }
    else
 {
 }

【问题讨论】:

  • 在解析之前修剪该字符串。那么之后的所有 NFE 都是由于用户(输入)错误造成的。

标签: java if-statement parseint java.lang.class


【解决方案1】:

因为subtotalTextField.getText() 返回的东西无法解析给int,所以在异常消息中它应该显示传递给parseInt() 的值是什么

【讨论】:

    【解决方案2】:

    返回的可能不是字符串?不要链接它,检查 null 并执行

    Object val = subtotalTextField.getText();
    if (val != null)
        String txt = val.toString();
    

    【讨论】:

    • 它必须是一个字符串,否则会出现编译时错误(getText 通常表示字符串)。 NumberFormatExceptions 通常表示不能将字符串解析为 int(或其他数字类型)。
    • 是字符串,不是整数表示
    • 例如不在 Android 中 - 它会返回 Spannable
    【解决方案3】:

    如上所述,在文本字段中输入的文本无法解析为整数。这意味着您的文本字段包含字符,即“2s”。

    如果您想避免每次用户输入无效整数时出现此错误,请在其周围加上 try-catch 子句。

    try{
    // Try to parse to Integer
    
    }catch(NumberFormatException e) {
    // Thing to do when a user enters non-valid Integer
    }
    

    【讨论】:

      【解决方案4】:

      我可以考虑的 subtotalTextField.getText() 的可能值

       subtotalTextField.getText() = null; // or
      
       subtotalTextField.getText() = "";  // or
      
       subtotalTextField.getText() = "Any non passable String"; // a ,b c .. 1a ,2a ... etc
      

      如果您可以通过任何验证确保用户输入的值是有效数字。从你的逻辑开始没问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-29
        • 1970-01-01
        • 2016-04-29
        • 1970-01-01
        • 2020-07-23
        • 2016-01-03
        相关资源
        最近更新 更多