Java JTextField 空字符串错误

Posted

技术标签:

【中文标题】Java JTextField 空字符串错误【英文标题】:Java JTextField empty string error 【发布时间】:2014-10-23 11:04:13 【问题描述】:

如下所示,我不断收到空字符串错误

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""

我不确定为什么我不断收到此错误,因为我不尝试在 JTextField 中键入数字的情况下进行计算。下面是我用于计算按钮的代码,非常简单。

private void ButtonCalculateActionPerformed(java.awt.event.ActionEvent evt)                                                 
         Height = Integer.parseInt(this.TextFieldHeight.getText());
         Weight = Integer.parseInt(this.TextFieldWeight.getText());
         BMI = Integer.parseInt(this.TextFieldBMI.getText());
         answer = Height + Weight;
        this.TextFieldBMI.setText("The answer is: " + answer);
                                                   

这些是定义的变量

//variables
    static int Height;
    static int Weight;
    static int BMI;
    static int answer;

【问题讨论】:

那不是真的,我在 JTextfields 中输入一个数字,然后我点击按钮进行计算,我得到了上面提到的错误。 发布Minimal, Complete, and Verifiable example 以获得进一步帮助。您所展示的内容并没有描绘出足够清晰的画面来帮助您解决问题 this.TextFieldHeight.getText() 让我头晕目眩。您是否在包含 TextFieldHeight、TextFieldWeight 和 TextFieldBMI 的类层次结构中,并使用在每一步都被覆盖的静态 getText 方法? 对不起,对不起!我在不应该添加的时候添加了 BMI 变量,因为假设答案是输出到 TextFieldBMI 而不是 .getText() ,所以它总是空的。问题解决了! 【参考方案1】:

当 TextField 为空(getText() 返回 "")时会发生这种情况,因此 Integer 类无法解析任何内容并引发异常。你应该用try/catch包围解析代码:

try
    Height = Integer.parseInt(this.TextFieldHeight.getText());
    Weight = Integer.parseInt(this.TextFieldWeight.getText());
    BMI = Integer.parseInt(this.TextFieldBMI.getText());
    answer = Height + Weight;
    this.TextFieldBMI.setText("The answer is: " + answer);
catch(NumberFormatEeceptinon e)
    //So something when paring failed, e.g. show a error message

【讨论】:

解决了异常泛滥的问题,是一个整体的好习惯,但没有解决字段应该为空的真正问题 当然,但是从 OP 发布的内容来看,这是我现在唯一能做的事情。字符串为空的问题出在其他地方。 @Deltharis 抱歉,我真的应该开始更仔细地阅读:/【参考方案2】:

对不起,对不起!我在不应该添加的时候添加了 BMI 变量,因为假设答案会输出到 TextFieldBMI 而不是 .getText() 中,所以它总是空的。问题解决了!

【讨论】:

如此简单。应该有人发现了。但请以供将来参考,当您发布问题时,请包含一个演示问题的简短可运行示例(我们可以复制-粘贴-编译-运行) 我会为以后的所有问题这样做,谢谢:)【参考方案3】:

您在其中一个文本字段为空时单击按钮"",您应该在进行解析之前添加empty 检查。

     if(!TextFieldHeight.getText().trim().equals("") && 
        !TextFieldWeight.getText().trim().equals("") && 
        !TextFieldBMI.getText().trim().equals(""))
      //Parse string
     

注意:根据命名约定,变量名应以小写开头。

当您输入一些无法解析为整数的字符串时,您也可能会遇到异常。

【讨论】:

“我不知道为什么我一直收到这个错误,因为我不输入数字就不会尝试计算” - 真的不知道这会有什么不同,鉴于OP的说法是正确的。可能是引用问题或 OP 输入了非法字符。没有 MCVE 很难分辨 这是一个很好的解决方案,但它只有在字符串为空的情况下才有效。 NumberFormatExceptions 可能因多种原因而发生,例如字符串包含字母。【参考方案4】:

我相信当您按下要打印答案的 jButton 时,您会将 TextFieldBMI 保持为空!您应该在下面显示的代码中注释该行。如果您想输入新的 BMI 值,您需要为其创建另一个文本字段,并为答案创建另一个文本字段。如果您使用原始代码将 TextFieldBMI 保留为空,然后按下按钮,您将再次收到相同的错误。

评论了您的代码并且它正在运行;

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)                                          

         Height = Integer.parseInt(this.TextFieldHeight.getText());
         Weight = Integer.parseInt(this.TextFieldWeight.getText());
//       BMI = Integer.parseInt(this.TextFieldBMI.getText());
         answer = Height + Weight;
        this.TextFieldBMI.setText("The answer is: " + answer);



       

如果要计算BMI;

你的字段应该是 ;

    static int Height;
    static int Weight;
    static double BMI;
    static int answer;

您的按钮操作应该是;

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)                                          

        Height = Integer.parseInt(this.TextFieldHeight.getText());
        Weight = Integer.parseInt(this.TextFieldWeight.getText());
        BMI = getBMI(Weight, Height);
        this.TextFieldBMI.setText("BMI is  " + BMI);


     

BMI计算方法应该是;

private static double getBMI(int weightInKg, int heightInCm)  

    return weightInKg / Math.pow(((double) heightInCm / 100), 2); 
 

【讨论】:

以上是关于Java JTextField 空字符串错误的主要内容,如果未能解决你的问题,请参考以下文章

java中JTextField输入的字符如何进行判断非法输入

java中怎么在文本框(JTextField)中输出Int型的数字

是否可以使用 jtextfield 和 Jlist 进行自动完成?

java如何获取输入框内容并赋值

JTextField 根据最大​​输入宽度,计算字符串宽度

Tomcat 8(和 9)强制行为,空字符串被错误地设置为空字符串