1

在我的项目中,我JTextField在发票中设置了总计。它的名字是txtGtotal。当客户支付预付款时,他输入了它的价值txtAdvance JTextField,我写了一条绳子到txtAdvance钥匙释放以设置到期付款txtDue JTextField。(如果客户没有支付任何预付款,他应该输入 0txtAdvancetxtDue设置 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用一个数值替换那个空之后,系统的措辞是正确的。我怎样才能阻止那个错误。因为他们显示错误在电源线的第二行。这产生了一个称为双重广告的变量。

4

3 回答 3

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);
}
于 2013-10-31T13:45:59.883 回答
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;
      }
    }
于 2013-10-31T13:46:17.030 回答
0

您可以说,按 Backspace 时不应触发该操作,试试这个:

if(evt.getKeyCode() != 8){ //Backspace
    double gtotal = Double.parseDouble(txtGtotal.getText());
    double ad = Double.parseDouble(txtAdvance.getText());
    double due = gtotal - ad;
}
于 2013-10-31T13:42:31.260 回答