如何修复数字格式异常:空字符串

时间:2013-10-31 13:34:55

标签: java keyevent

在我的项目中,我将JTextField设置为发票中的总计。它的名字是txtGtotal。当客户支付预付款时,他会在txtAdvance JTextField中输入其值,然后我写了一封电话给txtAdvance的关键发布,以便将到期付款设置为txtDue JTextField。 (如果客户没有支付任何预付款,他应该在txtAdvance中输入0并且txtDue也设置为0)

以下是我对重要事件的看法。

private void txtAdvanceKeyReleased(java.awt.event.KeyEvent evt) {
    double gtotal = Double.parseDouble(txtGtotal.getText());
    double ad = Double.parseDouble(txtAdvance.getText());
    double due = gtotal - ad;
}

我的问题是当我清除txtAdvance中的数字值并尝试键入另一个数字值然后输入我得到这个java.lang.NumberFormatException:空字符串错误。但是在我用数字值替换那个空txtAdvance jtextfeild之后,系统正确地措辞了。我怎么能阻止这个错误。因为他们显示错误是在电源线的第二行。它产生一个名为double ad的变量。

3 个答案:

答案 0 :(得分:3)

明显的解决方案如何:

private void txtAdvanceKeyReleased(java.awt.event.KeyEvent evt) {
    double gtotal = parseDouble(txtGtotal.getText());
    double ad = parseDouble(txtAdvance.getText());
    double due = gtotal - ad;
}

private double parseDouble(String s){
    if(s == null || s.isEmpty()) 
        return 0.0;
    else
        return Double.parseDouble(s);
}

答案 1 :(得分:1)

要摆脱空字符串错误,你可以做一个简单的检查。

   private void txtAdvanceKeyReleased(java.awt.event.KeyEvent evt) {
      if(!txtGtotal.getText().trim().equals("") && !txtAdvance.getText().trim().equals("")){
        double gtotal = Double.parseDouble(txtGtotal.getText());
        double ad = Double.parseDouble(txtAdvance.getText());
        double due = gtotal - ad;
      }
    }

答案 2 :(得分:0)

你可以说,按Backspace不应该触发动作,试试这个:

if(evt.getKeyCode() != 8){ //Backspace
    double gtotal = Double.parseDouble(txtGtotal.getText());
    double ad = Double.parseDouble(txtAdvance.getText());
    double due = gtotal - ad;
}