#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();
}
});
}
}
И вот как это выглядит после возникновения исключения:
РЕДАКТИРОВАТЬ 21.10.2011: я думаю, что с Eclipse или Java-отладчиком не происходит ничего странного, просто исключения перехватываются и повторно генерируются в EventDispatchThread.pumpOneEventForFilters(int) . Я полагаю, что нет способа сообщить Eclipse «приостановить выполнение исключений, которые будут перехвачены и, возможно, повторно скопированы». Очень жаль.
Ответ №1:
Я вижу аналогичный результат в NeteBeans, но Thread.setDefaultUncaughtExceptionHandler()
он может быть полезен в этом контексте. Здесь есть пример.
Комментарии:
1. Полезно знать, что NetBeans действует аналогично, возможно, проблема связана с JPDA, а не с Eclipse. И спасибо за предложение, но все то же раздражающее поведение сохраняется даже с обработчиком неперехваченных исключений.
Ответ №2:
Насколько я могу судить, решения для этого нет. Eclipse ведет себя правильно, правильное поведение просто раздражает.
Ответ №3:
У меня была эта проблема, и я нашел кое-что, что сработало для меня.
Я использую Kepler и смог остановить это, перейдя на вкладку точки останова перспективы отладчика и сняв флажок в EventDispatchThread .