Catch-блок с NumberFormatException игнорируется?

Я пытаюсь отправить ошибку JOptionPane, когда пользователь вводит недействительный или вообще ничего. Я пытаюсь сделать это с помощью блока try/catch и исключения NumberFormatException, но мне кажется, что блок игнорируется, но этого не может быть.

import javax.swing.*;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.lang.NumberFormatException;

public abstract class Input extends JFrame implements ActionListener { 

     public static void main(String[] args) throws NumberFormatException {

    //implementation of the GUI with JTexFields etc.

    try {
        button.addActionListener(e -> {
            Label.setText(" ");

            int Num1 = 5;

            int Num2 = Integer.valueOf(Field1.getText());

            if (Num1 <= 0) {
                //something;
            }

            //calculate with input 
       });
   }
    catch (NumberFormatException e) {
        JOptionPane.showMessageDialog(null,
                "Please watch out for your input.",
                "Input error",                        
        JOptionPane.ERROR_MESSAGE);
    }
}
}   

Мне жаль, что код, вероятно, не соответствует правилам кодирования, но я вырезал все неважные части и поэтому, возможно, я сделал код «уродливее».


person Community    schedule 25.06.2018    source источник
comment
Попробуйте отладить это.   -  person f1sh    schedule 25.06.2018
comment
NumberFormatException выбрасывается внутри лямбда-выражения и, вероятно, не выбрасывается повторно.   -  person LuCio    schedule 25.06.2018


Ответы (1)


Поместите блок try catch в прослушиватель действий. Слушатель действий — это другой класс, поэтому ваш текущий блок try catch не будет перехватывать в нем исключения.

person Community    schedule 25.06.2018
comment
на самом деле это, по сути, другой класс (если бы это был метод, исключение было бы перехвачено) - решение переместить try-catch внутрь лямбда - person user85421; 25.06.2018
comment
Посмотрите на это так: блок catch защищает только выполнение button.addActionListener. То, что внутри круглых скобок, не выполняется, это просто параметр (ActionListener). На данный момент слушатель — это просто данные, а не выполнение. - person Mark Jeronimus; 25.06.2018