Это небольшое раздражение, которое у меня возникает при отладке с помощью 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();
}
});
}
}
А вот как это выглядит после выбрасывания исключения:
EDIT 21/10/2011: ничего странного не происходит с Eclipse или отладчиком Java, просто исключения перехватываются и повторно создаются в EventDispatchThread.pumpOneEventForFilters(int). Я полагаю, что нет способа сказать Eclipse «приостановить выполнение исключений, которые будут перехвачены и, возможно, повторно сгенерированы». Очень плохо.