Swing, как правило, не безопасен для потоков. Если вам нужно изменить компоненты Swing из потоков, отличных от AWT Event-dispatch-Thread, используйте
SwingUtilities.invokeLater(new Runnable(){public void run() {
// here your modification code
}});
В качестве альтернативы invokeAndWait
. (Эти методы на самом деле делают то же самое, что и одноименные методы в java.awt.EventQueue
.)