So I think you have several problems with this, but the biggest is that you have every ball have its own thread.The more balls you have (quiet down kiddies
) the more threads, and the more work it is to schedule between the threads.
The better bet would be to have just a few background threads, 1 to schedule the moving and another 1 to schedule repainting. Both should be scheduled at a fixed rate, rather than using Thread.sleep, which would be a fixed delay. Take a look at Timer and TimerTask, or ScheduledExecutorService to do this.
The Ball itself would be a normal object which keeps track of its position and can handle painting itself.