直到现在,我都使用AOP方法和@ControllerAdvice方法在Spring Web应用程序中实现了异常处理,并且它们没有任何问题。
现在,我正在使用Spring Framework实现一个独立的Swing桌面应用程序,并尝试使用它们来处理异常,但是我无法使其正常工作。
为简化细节,我做了一个简单的项目;
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中捕获它,但它不起作用。
有人可以帮助我了解我在这里缺少什么吗?还是有什么更好的方式处理我的异常?
编辑:当我运行启动器时,将显示框架并引发NPE;
java.lang.NullPointerException
at main.MainFrame.init(MainFrame.java:14)
at main.Launcher$1.run(Launcher.java:19)
但是System.out.println(“ hey”);在我的GlobalControllerAdvice方法中没有打印出来,所以我猜我的类不知道抛出的异常。