当我 运行 我的 jframe 时,它​​总是显示 "java.lang.NumberFormatException: empty String"

When i run my jframe, it always shows "java.lang.NumberFormatException: empty String"

当用户填写薪水和加班文本字段时,本应填写总工资文本字段,但一旦程序启动,它总是显示 java.lang.NumberFormatException:空字符串错误

这是使用

的代码
   private void jTextGrossPayMouseEntered(java.awt.event.MouseEvent evt) {                                           
 try{

    DecimalFormat numberFormat = new DecimalFormat("#.00");

   double salary = Double.parseDouble(jTextBasicSalary.getText());
   double hours = Double.parseDouble(jTextHours.getText());     
    double overtime = Double.parseDouble(jTextOvertime.getText());     
    double overtimepay = Double.parseDouble(jTextOvertimePay.getText());     
   double total1;
   double total2;
  double total3;

   total1 = salary * hours;
    total2 = overtime * overtimepay;
   total3 = total1 + total2;

  String gross = String.valueOf(total3);

   jTextGrossPay.setText(gross);

   }                                          

     catch(Exception e){
      e.printStackTrace();
    }

   }

在我 运行 程序之后这些是错误

java.lang.NumberFormatException: empty String

这里:

private void jTextGrossPayMouseEntered(

表示当鼠标进入屏幕上的某个组件时执行此代码。

你要明白:鼠标在某处移动与"the user has entered all required information in all text fields"不同

然后:

double salary = Double.parseDouble(jTextBasicSalary.getText());

您 could/should 做什么:检查 文本字段的内容,然后再对其内容进行任何操作!

含义:在考虑解析之前,您应该检查文本字段是否包含 non-empty 字符串。如果是这样,您就可以在 try/catch 块中进行解析。如果解析失败,您可以向用户显示一个消息框,告诉他您希望他输入什么。您应该分别为所有文本字段执行此操作。

正如最初所说:问问自己 什么时候 checking/parsing 应该发生。当鼠标进入"something"时真的应该发生吗?或者它更像是:点击某个按钮时应该发生这种情况?

所以:解决方案也可能是编写新代码,并将其放入某种动作侦听器中。对按钮点击或菜单项选择等操作做出反应!

您可以实现类似于检查输入是否为有效 Double 的辅助方法的方法:

private boolean checkValidInput(String input) {
    try {
        Double.parseDouble(input);
        return true;
    } catch (Exception e){
        System.out.println("input :" + input +" is not a valid double");
        return false;
    }
}

可能会有更快的实现,但这个很简单并且有效...