Обработка исключений в приложении Swing / Spring

Я реализовал обработку исключений в своих веб-приложениях Spring, используя как подход AOP, так и метод @ControllerAdvice, и до сих пор не имел с ними проблем.

Теперь я реализую автономное настольное приложение Swing с использованием Spring Framework, а также пытаюсь обработать исключения, но у меня не получалось заставить его работать.

Чтобы сократить детали, я сделал простой проект;

Обработка исключений в приложении Swing / Spring

Launcher.java;

public class Launcher {

public static void main(String[] args) {

    EventQueue.invokeLater(new Runnable() {
        public void run() {
            ApplicationContext context = null;
            try {
                context = new AnnotationConfigApplicationContext(Config.class);
                MainFrame mainFrame = (MainFrame) context.getBean("mainFrame");
                mainFrame.init();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (context != null)
                    ((ConfigurableApplicationContext) context).close();
            }

        }
    });
}

}

Config.java;

@Configuration
@ComponentScan("main")
public class Config {

@Bean(name = "mainFrame")
public MainFrame createMainFrame() {
    return new MainFrame();
}

}

GlobalControllerAdvice.java;

@ControllerAdvice
public class GlobalControllerAdvice {

@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public void handleException(Exception ex) {
    System.out.println("hey");
}
}

MainFrame.java

public class MainFrame extends JFrame {

public MainFrame() {
    this.setSize(500, 500);
}

public void init() {
    setVisible(true);
    int[] a = null;
    System.out.println(a.length);
}

}

Итак, здесь, в моем методе init (), при попытке распечатать длину массива «null» возникает исключение NullPointerException, которое я пытаюсь перехватить в моем ControllerAdvice, но оно не работает.

Может кто-нибудь, пожалуйста, помогите мне понять, что мне здесь не хватает? Или что может быть лучшим способом обработки моих исключений?

Обновлено: Когда я запускаю Launcher, появляется рамка и выдается NPE;

java.lang.NullPointerException
    at main.MainFrame.init(MainFrame.java:14)
    at main.Launcher$1.run(Launcher.java:19)

Но System.out.println ("эй"); в моем методе GlobalControllerAdvice не распечатывается, поэтому я предполагаю, что мой класс не знает о сгенерированном исключении.

Что значит "не работает"? Пожалуйста, четко опишите, что вы ожидаете, и что происходит на самом деле.

GhostCat 04.07.2018 09:12

вы пробовали: попробовать-поймать? вы пытаетесь обработать NPE в своем ControllerAdvice, но как вы связываете свой ControllerAdvice с кодом, генерирующим NPE? обычно не существует универсального способа обработки NPE, и вы хотите обрабатывать каждый случай определенным образом, так почему вы даже пытаетесь сделать что-то подобное?

Stultuske 04.07.2018 09:12

@GhostCat «не работает» означает, что мое приложение выдает NPE, но мой ControllerAdvice его не получает.

josh 04.07.2018 09:26

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

josh 04.07.2018 09:28

Но что вы имеете в виду: фрейм не отображается, и все приложение вылетает, а просто выводит трассировку стека? Опять же: дайте минимальный воспроизводимый пример, который содержит такие детали. Также обновите вопрос, вместо того, чтобы помещать больше информации в комментарии, пожалуйста!

GhostCat 04.07.2018 09:28

@ozgen еще раз: вы никогда не связываете свой метод с советом. как вы ожидаете, что это сработает?

Stultuske 04.07.2018 09:30

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

josh 04.07.2018 09:39

Вы используете Spring в своем настольном приложении только для обработки исключений? Это кажется довольно неестественным, поскольку spring в основном предназначен для серверных (веб-) приложений.

dpr 04.07.2018 10:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
215
0

Другие вопросы по теме