主要的Catch All Exceptions代码没有捕获事件异常

时间:2016-07-09 23:55:59

标签: java exception-handling awt try-catch

我试图把一个"赶上所有"用于捕获我的代码中发生的任何异常的代码,以便将其发送到服务器。基本上,下面的代码是我的主要代码。这将创建一个带按钮的Jframe。当我点击其中一个按钮时,我导致崩溃(取消引用空指针)。但是,如果异常没有被下面的代码捕获,而是显示在我的控制中。

public static void main(String args[]) {

        try {


        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {

                    JFRAME_MAIN = new MainHomePage();
                    JFRAME_MAIN.setVisible(true);

            }
        });

        } catch (Exception ex) {

          System.out.println("Exception caught");   // <--- This is not being hit
        }

}

知道为什么或如何解决这个问题?

由于

PS:我没有把MainHomePage类的代码放在一起,因为它是一个大类,可以设置布局并添加按钮和动作监听器。在其中一个听众中,我发生了崩溃

1 个答案:

答案 0 :(得分:1)

未捕获异常,因为try-catch块中的代码不会抛出异常。此代码不处理按钮单击,它由ActionListener处理。监听器中的代码抛出了异常。

invokeLater方法只是向队列添加Runnable,添加Runnable的行为成功,因此不会生成异常。请参阅this page

在你的侦听器代码中添加一个try-catch来处理你的按钮点击,你应该能够捕获异常 - 寻找actionPerformed方法。

public void actionPerformed(ActionEvent e) {
    try{
        // your logic here
    }
    catch(Exception e){
        // do something to handle the exception here
    }
}

编辑(回复评论):

如果您想在一个地方处理所有未捕获的异常,您可以执行以下操作:

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    public void uncaughtException(Thread t, Throwable e) {
        System.out.println("Caught exception: "+e.getClass().getName());
        // do something else useful here
    }
});

您可以将该代码放在main方法中。