Eclipse / Java: неперехваченные исключения в EDT приостанавливают выполнение в EventDispatchThread.run()

#java #eclipse #debugging #swing #event-dispatch-thread

#java #eclipse #отладка #swing #событие-отправка-поток

Вопрос:

Это небольшая неприятность, с которой я сталкиваюсь при отладке с помощью Eclipse. Если установлен флажок «Приостановить выполнение при неперехваченных исключениях», отладчик обычно приостанавливает поток прямо там, где было вызвано исключение. Однако исключения в потоке отправки событий приводят к его приостановке в последней строке EventDispatchThread.run() . Нет никакой полезной информации о том, что такое исключение или что его вызвало, пока я не возобновлю поток, чтобы разрешить трассировку стека для печати на консоль.

Отладьте следующий код в Eclipse, чтобы продемонстрировать:

 public class SuspendOnUncaughtTest {
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                ((Object) null).toString();
            }
        });
    }
}
  

И вот как это выглядит после возникновения исключения:

Приостановлено в EventDispatchThread.run()
РЕДАКТИРОВАТЬ 21.10.2011: я думаю, что с Eclipse или Java-отладчиком не происходит ничего странного, просто исключения перехватываются и повторно генерируются в EventDispatchThread.pumpOneEventForFilters(int) . Я полагаю, что нет способа сообщить Eclipse «приостановить выполнение исключений, которые будут перехвачены и, возможно, повторно скопированы». Очень жаль.

Ответ №1:

Я вижу аналогичный результат в NeteBeans, но Thread.setDefaultUncaughtExceptionHandler() он может быть полезен в этом контексте. Здесь есть пример.

Комментарии:

1. Полезно знать, что NetBeans действует аналогично, возможно, проблема связана с JPDA, а не с Eclipse. И спасибо за предложение, но все то же раздражающее поведение сохраняется даже с обработчиком неперехваченных исключений.

Ответ №2:

Насколько я могу судить, решения для этого нет. Eclipse ведет себя правильно, правильное поведение просто раздражает.

Ответ №3:

У меня была эта проблема, и я нашел кое-что, что сработало для меня.

Я использую Kepler и смог остановить это, перейдя на вкладку точки останова перспективы отладчика и сняв флажок в EventDispatchThread .

введите описание изображения здесь