Я реализовал обработку исключений в своих веб-приложениях Spring с использованием как подхода AOP, так и метода @ControllerAdvice до сих пор, и у меня не было с ними проблем.
Теперь я внедряю отдельное настольное приложение Swing с использованием Spring Framework, а также пытаюсь обработать исключения, но не могу заставить его работать.
Чтобы сократить детали, я сделал простой проект;
![enter image description here](https://i.stack.imgur.com/MuSHE.png)
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 не распечатывается, поэтому я предполагаю, что мой класс не знает о сгенерированном исключении.