Для потомков, вот упрощенная версия CheckThreadViolationRepaintManager, найденная TofuBeer.
RepaintManager.setCurrentManager(new RepaintManager() {
public synchronized void addInvalidComponent( JComponent component ) {
check( component );
super.addInvalidComponent( component );
}
public void addDirtyRegion( JComponent component, int x, int y, int w, int h ) {
check( component );
super.addDirtyRegion( component, x, y, w, h );
}
private void check( JComponent c ) {
if( !SwingUtilities.isEventDispatchThread() && c.isShowing() ) {
new Throwable("EDT required!").printStackTrace();
}
}
});
Просто вызовите это в своем основном методе, и вы получите протоколы стека, записанные при каждом изменении компонентов в не-EDTрезьб.