Когда я запускаю свой jframe, он всегда показывает «java.lang.NumberFormatException: empty String» - PullRequest
1 голос
/ 13 мая 2019

Предполагалось, что текстовое поле брутто-зарплаты должно быть заполнено, когда пользователь заполняет текстовое поле зарплаты и сверхурочных, но как только программа запускается, она всегда показывает java.lang.NumberFormatException: empty String error

Вот код, который использует

   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: пустая строка

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Здесь:

private void jTextGrossPayMouseEntered(

указывает, что этот код выполняется, когда мышь вводит некоторый компонент на вашем экране.

Вы должны понимать: мышь, двигающаяся куда-то, не - это то же самое, что "пользователь ввел всю необходимую информацию во все текстовые поля".

Тогда:

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

Что вы могли бы / должны сделать: проверить содержимое ваших текстовых полей, прежде чем делать что-либо с их содержимым!

Значение: прежде чем даже думать о разборе, вы должны проверить, содержит ли текстовое поле непустую строку. Если это так, вы можете выполнить этот анализ в блоке try / catch. И если синтаксический анализ завершится неудачно, вы можете показать пользователю окно сообщения, сообщающее ему, чего вы ожидаете от него. Вы должны сделать это для всех ваших текстовых полей отдельно.

И как было сказано изначально: спросите себя , когда , что проверка / анализ должны произойти. Должно ли это случиться, когда мышь входит в «что-то»? Или это будет больше похоже на то, что должно произойти при нажатии какой-либо кнопки?

Итак: решение может также состоять в том, чтобы написать этот новый код и поместить его в своего рода слушатель действий. Это реагирует на действия, такие как нажатие кнопок или выбор пункта меню!

0 голосов
/ 13 мая 2019

вы можете реализовать что-то вроде вспомогательного метода, который проверяет, является ли ввод допустимым 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;
    }
}

Могут быть более быстрые реализации, но эта проста и работает ...

...