【问题标题】:When i run my jframe, it always shows "java.lang.NumberFormatException: empty String"当我运行我的 jframe 时,它​​总是显示“java.lang.NumberFormatException:空字符串”
【发布时间】:2019-05-13 07:23:26
【问题描述】:

假设在用户填写工资和加班文本字段时填写总工资文本字段,但程序一启动它总是显示 java.lang.NumberFormatException: empty String 错误

这是使用的代码

   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: 空字符串

【问题讨论】:

  • jTextBasicSalaryjTextHoursjTextOvertimejTextOvertimePay 字段之一在运行 jTextGrossPayMouseEntered 方法时为空。我不能根据您的 sn-p 确定,但假设它是在您输入总工资字段时执行的。添加一些额外的检查以确保正确填写每个字段。
  • 我希望它们由用户填写,我该如何解决?
  • 我猜这是一个完全不同的问题,您需要搜索 Java 中 JTextfields 的验证。

标签: java swing jtextfield mouselistener numberformatexception


【解决方案1】:

这里:

private void jTextGrossPayMouseEntered(

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

您必须了解:鼠标移动到某处与“用户已在所有文本字段中输入所有必需信息”相同。

然后:

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

您可以/应该做什么:在对文本字段的内容进行任何操作之前检查文本字段的内容!

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

正如最初所说:问问自己何时应该进行检查/解析。当鼠标进入“某物”时,它真的应该发生吗?还是更像:当某个按钮被点击时会发生这种情况?

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

【讨论】:

  • 谢谢你的提示,我会试试你说的:)
【解决方案2】:

你可以实现一个辅助方法来检查输入是否是一个有效的 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;
    }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多