Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何修复数字格式异常:空字符串_Java_Keyevent - Fatal编程技术网

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

Java 如何修复数字格式异常:空字符串,java,keyevent,Java,Keyevent,在我的项目中,我将在发票中设置一个JTextField。它的名字是txtGtotal。当客户支付预付款时,他在txtpeadve JTextField中键入其值,我在txtpeadve的按键释放中写入一条线,将到期付款设置为txtpeadve JTextField。(如果客户未支付任何预付款,则应在txtpeadve中键入0,并且txtDue也应设置为0) 下面是我对关键事件的看法 private void txtAdvanceKeyReleased(java.awt.event.KeyEven

在我的项目中,我将在发票中设置一个
JTextField
。它的名字是
txtGtotal
。当客户支付预付款时,他在
txtpeadve JTextField
中键入其值,我在
txtpeadve
的按键释放中写入一条线,将到期付款设置为
txtpeadve JTextField
。(如果客户未支付任何预付款,则应在
txtpeadve
中键入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
:空字符串错误。但在我用一个数字值替换了空的
txtprove jtextfield
之后,系统就正常了。我怎样才能阻止那个错误。因为他们显示错误在第二条电线上。这会产生一个名为double ad的变量。

您可以说,按Backspace键时不应触发该操作,请尝试以下操作:

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

您可以说,不应在按下Backspace时触发该操作,请尝试以下操作:

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

那么显而易见的解决方案是什么呢

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);
}

那么显而易见的解决方案是什么呢

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);
}

要消除空字符串错误,您可以执行一个简单的检查

   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;
      }
    }

要消除空字符串错误,您可以执行一个简单的检查

   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;
      }
    }


@n4pgamer仅仅添加
if
语句不是更好吗?如果您多次生成同一事件并且在继续过程中遇到困难,请忽略它,这样将来的错误将取消订阅结构的密钥编码资格。@Tafari I使用了下面给出的if语句:)@nikpon我知道。在将0.00设置为txtAdvance-jextfeild之后,我也没有ay错误。但我还是想解决这个错误。我想我找到了答案。@user2867987很高兴听到它,你是新来的,所以你可能不知道它,这么少的建议,请接受一个正确的答案,如果它对您有帮助:)@n4pgamer仅仅添加
if
语句不是更好吗?如果您多次生成同一事件并且在继续过程中遇到问题,请忽略它,这样将来的错误将取消对订阅结构进行密钥编码的资格。@Tafari I使用了if语句,其中它在下面工作:)@nikpon我知道。在将0.00设置为txtAdvance-jextfeild之后,我也没有ay错误。但我还是想解决这个错误。我想我找到了答案。@user2867987很高兴听到它,你是新来的,所以你可能不知道它,所以没有什么建议。如果答案对你有帮助,请接受正确的答案:)你能告诉我这是什么evt.getKeyCode()!=8意味着为什么是8?我想使用常量是个坏主意。我应该用一个常数来让它更清晰,但现在我想起来它根本就没有必要。我得到了这个,但我能把什么放在其他语句中呢?我想将0.00设置为TXTAVANCE jextfeild。您能告诉我这是什么evt.getKeyCode()!=8意味着为什么是8?我想使用常量是个坏主意。我应该用一个常数来让它更清晰,但现在我想起来它根本就没有必要。我得到了这个,但我能把什么放在其他语句中呢?我想将0.00设置为TXTAVANCE jextfeild。对我来说,这似乎是最干净的解决方案:)太好了,事实上它正在工作。:)我想在txtfield上设置0.00。如何将此返回设置为0.0;你需要在JTextField上设置格式化程序:你能简单地告诉我我应该做什么样的格式化吗?实际上我也是这样记录的。if(txtpadvance.getText()==null | txtpadvance.getText().isEmpty(){txtpadvance.setText(“0.0”)}else{double gtotal=double.parseDouble(txtGtotal.getText());double ad=double.parseDouble(txtpadvance.getText());double due=gtotal-ad;txtpdue.setText(sdf.Money(due))})它正在工作。:)对我来说,这似乎是最干净的解决方案:)太好了,事实上这是可行的我想在txtfield上设置0.00。如何将此返回设置为0.0;你需要在JTextField上设置格式化程序:你能简单地告诉我我应该做什么样的格式化吗?实际上我也是这样记录的。if(txtpadvance.getText()==null | txtpadvance.getText().isEmpty(){txtpadvance.setText(“0.0”)}else{double gtotal=double.parseDouble(txtGtotal.getText());double ad=double.parseDouble(txtpadvance.getText());double due=gtotal-ad;txtpdue.setText(sdf.Money(due))})它正在工作。:)你能不能再告诉我一次这是什么evt.getKeyCode()!=8意味着为什么是8?键盘上的每个键都有一个虚拟数字。8的意思是backspaceok:)这也是一个新东西,它也在工作。太好了:)你能再告诉我一次这是什么evt.getKeyCode()!=8意味着为什么是8?键盘上的每个键都有一个虚拟数字。8的意思是backspaceok:)这也是一个新东西,它也在工作。太好了:)