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

Exception in thread "JavaFX Application Thread"
   java.lang.NumberFormatException: empty String
   at math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
   at math.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
...

Это код:

class Main extends Application 
{
       
        @Override
        public void start(Stage stage1) throws Exception
       {
           Label lbl1= new Label("Note Controle");
           lbl1.setFont(new Font(15));
           TextField nc= new TextField();
           //...
        }

        @Override 
        public void handle(ActionEvent arg0)
        {
            float c,td, mg;
            c=Float.parseFloat(nc.getText());
            td=Float.parseFloat(ntd.getText());
            if ((!nc.getText().isEmpty()&&nc.getText()!= null) &&
                (!ntd.getText().isEmpty()&&ntd.getText()!=null)) 
            {
                if ((c >= 0 && 20 >= c) && (td >= 0 && 20 >= td) ) 
                {
                    mg = (float) (c * 0.6 + td *         0.2);//examen60%td20% 
                    res.setText(String.valueOf(mg));
                } 
                else 
                {
                     //...
                }
             }
         }
   //...
}
1
MX TV 9 Фев 2021 в 20:03

1 ответ

Лучший ответ

Я действительно не знаю почему, но вы правильно проверяете пустые строки и непосредственно перед этим вызываете это:

c  = Float.parseFloat(nc.getText());
td = Float.parseFloat(ntd.getText());

Что вызовет исключение, если nc или ntd действительно содержат пустые строки.

Измените его, например, на:

c  = Float.parseFloat(nc.getText().isEmpty() ? "0" : nc.getText());
td = Float.parseFloat(ndt.getText().isEmpty()? "0" : ntd.getText());

В качестве предложения это был бы лучший подход ( поскольку он обрабатывает значения null + empty + nonNumeric ).

public static boolean isNumeric(final String str) 
{
    if (str == null || str.length() == 0) 
        return false;
    for (char c : str.toCharArray()) 
        if (!Character.isDigit(c)) 
            return false;
    return true;
}

Так:

c  = Float.parseFloat(!isNumeric(nc.getText()) ? "0" : nc.getText());
td = Float.parseFloat(!isNumeric(ndt.getText())? "0" : ntd.getText());
0
aran 9 Фев 2021 в 22:23