2016-07-09 3 views
0

Iam пытается поставить код «поймать все», чтобы поймать любое исключение, которое происходит в моем коде, чтобы оно могло быть отправлено на сервер. В основном, код ниже - это код моего Main. Это создает 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

Исключение не поймано, потому что оно не выбрано кодом внутри блока try-catch. Этот код не обрабатывается нажатием кнопки, он обрабатывается ActionListener. Код в слушателе бросает исключение.

Метод invokeLater просто добавляетв очередь, что добавляет, что 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 
    } 
} 

EDIT (в ответ на комментарий):

Если вы хотите, чтобы обрабатывать все пойманные исключения в одном месте, вы могли бы сделать что-то вроде этого:

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 
    } 
}); 

Вы бы разместить что кода внутри вашего основного метода.

+0

Благодарим вас за ответ. Но у меня так много слушателей километра моего кода, я должен добавить к каждому из них? Невозможно ли добавить его в одно место, чтобы я поймал любое исключение, созданное моим приложением? – Snake

+0

Я отредактирую свой ответ, чтобы ответить на ваш комментарий. –

+0

Вот и все .. так сильно – Snake