Rotating background using Swing: performance issues
Here is something you could do which would work for computers not fast enough to rotate the image every 30 ms.  Instead of requesting a repaint every 30ms, define the angularVelocity (rads / second) and call a repaint every 30 ms or as fast as possible, if it can't make 30 ms.  Then compute angleRad = angularVelocity * (System.currentTimeMillis() - startTime).

Swing efficiency is not the problem. The image manipulation library is the bottleneck. I don't think you can do anything to make it faster. There are probably some (non-Java) libraries that can rotate images much faster using the GPU, but mixing those with Java would make the installation a nightmare.

Another solution would be to store all rotated images in memory.  That might work if you were rotating the image by 90 degrees increments, but you would need an awful lot of RAM for all images incremented by 0.001 rads.  

As an aside, I believe repaint() now has to be called on the Swing event thread, which was not the case before Java 7.  I'm not quite sure and I could not find about this on the web, so I would be grateful if someone could comment.  You could use a SwingWorker if that is the case. Actually, for cleanness, you should probably stick to a SwingWorker.  It does exactly want you are doing, and is made especially for that.