(Это Groovy 1.8.9. Проблема фиксируется в Groovy 2.1.0-RC-1)Обработка исключений в Groovy SwingBuilder.doOutside
Я пытаюсь обрабатывать исключения, которые происходят в SwingBuilder.doOutside{}
. Я использовал Thread.setDefaultUncaughtExceptionHandler()
, но, похоже, он не перехватывает нечеткие исключения в doOutside{}
.
Вот пример программы, которая иллюстрирует проблему. Если я запустил это из командной строки и нажал кнопку EDT Exception, я вижу результаты printStackTrace()
на stderr. Если я нажму Внешнее исключение, ничего не отображается. Что я делаю не так?
import groovy.swing.SwingBuilder
class ExceptionTest {
static main(args) {
Thread.setDefaultUncaughtExceptionHandler(
{ thread, exception ->
System.err.println "thread ${thread.getName()}"
exception.printStackTrace()
} as Thread.UncaughtExceptionHandler)
def swing = new SwingBuilder()
def testEDTButton = swing.button('EDT exception')
testEDTButton.actionPerformed = { throw new Exception("EDT exception") }
def testOutsideButton = swing.button('Outside Exception')
testOutsideButton.actionPerformed = { swing.doOutside { throw new Exception("Exception outside") } }
def frame = swing.frame(title: 'Test exception reporting') {
vbox {
widget(testEDTButton)
widget(testOutsideButton)
}
}
frame.pack()
frame.show()
}
}