I am new to java. I am teaching myself the language. I have this bouncing ball program. When the start button is pressed the ball drops and bounces around the panel. Each time you press start a new ball is created. The problem is each new ball slows down the program. Is there a way to correct this?
Sorry if this isn't the correct place for this topic.
[ December 22, 2008: Message edited by: Lamr Jared ]
Joined: Oct 13, 2005
Welcome to JavaRanch
How are you scheduling re-drawing the Balls? You are using Thread.sleep(). I think Thread.sleep(1) is a bit short; it can take more than 1 millisecond to repaint the entire GUI. Try giving a longer delay, maybe 20.
There have been problems on Windows with timings which don't divide exactly by 10. I can't remember the details, but it can cause the system clock to show incorrect times.
That sort of question is more difficult than the average beginner's question; it might be appropriate for the Swing forum or the Performance forum, but I think you might get more attention in Swing . . . moving.
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.
Joined: Jun 09, 2003
> So I think you have several problems with this,...
there are major problems with the whole lot: - indiscremenent use of the swing thread - getGraphics() (which is a wrist-slasher)