There's already a thread in charge of painting all components that calls paint() (which then calls paintComponent()) - grabbing the graphics reference and painting to it in another thread is not going to work because there's no reference to any component or anything once the other thread gets around to calling g.paintOval(), the graphics reference might be painting another component, have a different clip region, be disposed of, etc. by this point anyway.
Swing is a single threaded model - look up some stuff about the event thread in Swing, SwingUtilities.invokeLater(), SwingUtilities.invokeAndWait(), etc.
Write once, run anywhere, because there's nowhere to hide! - /. A.C.