Класс EDT (java.awt.EventDispatchThread
, не ищите его в javadoc, этот класс package private ) сильно изменился с момента появления AWT.
В JDK6 вы можете видеть, что этот класс теперь может правильно обрабатывать исключения, возникающие внутри EDT.Обработка исключений немного сложна в текущей версии:
- , если вы установили свойство
sun.awt.exception.handler
, то ваш обработчик будет вызываться для каждого исключения, создаваемого кодом разработчика, вызываемым внутри EDT (совместимость спредыдущие версии JDK гарантированы). - в противном случае любое исключение будет повторно отправлено , следовательно, остановит текущий EDT, и любой
UncaughtExceptionHandler
по умолчанию сможет его перехватить, как ваш фрагмент
НО (а это очень важно ), если вы внимательно посмотрите код EDT, вы увидите, что этот механизм выигралне работает, если исключение возникает в EDT , когда отображается модальное диалоговое окно (я полагаю, это потому, что управление EDT и EventQueue
довольно сложное, и я бы даже осмелился сказать " грязный * 1030"* ": большая часть кода выглядит там как хаки).
В этой конкретной ситуации исключения будут записываться в System.err
, кроме случаев, когда вы установили свойство sun.awt.exception.handler
.Значение по умолчанию UncaughtExceptionHandler
не поможет.
Так что я считаю, что ДА, вы все равно должны беспокоиться о sun.awt.exception.handler
свойстве , за исключением случаев, когда вы можете точно сказать, чтоваше приложение не использует модальные диалоги (не забывайте, что JOptionPane
диалоги также являются модальными).