Normally, the paint() method is not called directly, but rather a suggestion to paint is made via repaint(), which is thread safe. I suspect the flickering behavior is related to this. It's been a while since I tinkered around with this problem, so I can't remember what the issue was with calling paint() directly, but I do recall that there was one. If I find a little free time, I might play around with this some more.