2012-06-07 3 views
0

У меня есть приложение Java, которое использует swing. Я нашел способ поймать все неперехваченное исключение в приложении (см. Ниже). Я хотел бы зарегистрировать сообщение, показать диалог с сообщением для пользователя и убить приложение. Проблема в том, что я пытаюсь поймать некоторые исключения качания. Попытка показать диалог после исключения в UncaughtExceptionHandler невозможна, поскольку поток Swing остановлен. Есть ли способ показать диалог? Создание нового качающегося потока или что-то в этом роде?Показать диалог, когда выбрано исключение Swing

Спасибо!

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 
    boolean alreadyCaught = false; 

    public void uncaughtException(Thread t, Throwable e) { 
     if (alreadyCaught) 
      return; 

     alreadyCaught = true; 
     e.printStackTrace(); 

     //show Dialog 
    } 
}); 

ответ

3

Вполне возможно показать диалог с помощью неперехваченного обработчика исключений по умолчанию. Один из наших продуктов использует этот механизм в течение последних 5 лет без каких-либо проблем.

У нас есть обходное решение проблемы, когда EDT заменяется из-за исключения, убивающего текущий EDT. Вместо того чтобы использовать регулярные SwingUtilities#invokeLater, чтобы показать диалоговое окно, мы используем

new Thread(new Runnable() { 
     public void run() { 
     EventQueue.invokeLater(aRunnable); 
     } 
    }).start(); 

Это позволяет EDT быть заменен новым, и запускает Runnable на вновь созданный EDT.

+0

Спасибо, гораздо лучше, чем то, что я делал, что фактически сработало (я просто не видел диалог, потому что это было под моим заставкой ...). – ixM

Смежные вопросы