This week's book giveaways are in the Java EE and JavaScript forums.
We're giving away four copies each of The Java EE 7 Tutorial Volume 1 or Volume 2(winners choice) and jQuery UI in Action and have the authors on-line!
See this thread and this one for details.
The moose likes Swing / AWT / SWT and the fly likes New to Java. Need some proformance suggestions Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of The Java EE 7 Tutorial Volume 1 or Volume 2 this week in the Java EE forum
or jQuery UI in Action in the JavaScript forum!
JavaRanch » Java Forums » Java » Swing / AWT / SWT
Bookmark "New to Java. Need some proformance suggestions" Watch "New to Java. Need some proformance suggestions" New topic
Author

New to Java. Need some proformance suggestions

Lamar Jared
Greenhorn

Joined: Nov 20, 2008
Posts: 8
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 ]
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 38441
    
  23
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.
Steve Luke
Bartender

Joined: Jan 28, 2003
Posts: 4181
    
  21

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.


Steve
Michael Dunn
Ranch Hand

Joined: Jun 09, 2003
Posts: 4632
> 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)

the only hope is ctrl-a-delete and start again.

to start again, start here:

http://java.sun.com/docs/books/tutorial/uiswing/painting/index.html
Rob Spoor
Sheriff

Joined: Oct 27, 2005
Posts: 19674
    
  18

Lamr, please Use A Meaningful Subject Line. "Java Help" doesn't quite describe the problem accurately; about 99% of all threads are about Java help.

You can use the edit button to change it.


SCJP 1.4 - SCJP 6 - SCWCD 5 - OCEEJBD 6
How To Ask Questions How To Answer Questions
Lamar Jared
Greenhorn

Joined: Nov 20, 2008
Posts: 8
I appreciate all the help. I am only 6 months in working with Java. I don't know all the strengths yet. Thanks again everyone.
[ December 22, 2008: Message edited by: Lamar Jared ]
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: New to Java. Need some proformance suggestions