This repaint manager will make sure you call swing repaint operations from the right thread (the event dispatching thread).
From ClientJava: Easily Find Swing Threading Misakes
Not a bad idea, simple and easy to modify for your own needs.
// RepaintManager.setCurrentManager(new ThreadCheckingRepaintManager()); // public class ThreadCheckingRepaintManager extends RepaintManager { public synchronized void addInvalidComponent(JComponent jComponent) { checkThread(jComponent); super.addInvalidComponent(jComponent); } private void checkThread(JComponent c) { if (!SwingUtilities.isEventDispatchThread() && c.isShowing()) { System.out.println("Wrong Thread"); Thread.dumpStack(); } } public synchronized void addDirtyRegion(JComponent jComponent, int i, int i1, int i2, int i3) { checkThread(jComponent); super.addDirtyRegion(jComponent, i, i1, i2, i3); } }