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型的数字