File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Beginning Java and the fly likes Problem in doing animation using multithreading Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Problem in doing animation using multithreading" Watch "Problem in doing animation using multithreading" New topic
Author

Problem in doing animation using multithreading

trish mo
Greenhorn

Joined: Feb 24, 2011
Posts: 14
Hi !

Here is a simple piece of code that I have written to move a ball diagonally across the screen using a thread :



I want to extend the idea to multiple threads i.e., multiple balls moving across the screen with their starting points generated randomly. However, I am lost as to how to go about doing the same. For instance, what should the condition be in the while loop in the run method ?
Ulf Dittmer
Marshal

Joined: Mar 22, 2005
Posts: 41604
    
  55
Unless the balls do more complicated things, I think representing each with its own thread is overkill. I'd suggest to create a Ball class that holds all required information about one ball (x and y coordinates, speed, direction, color, etc.), and then to have an array of those that the main thread iterates through and manipulates.


Ping & DNS - my free Android networking tools app
trish mo
Greenhorn

Joined: Feb 24, 2011
Posts: 14
Unless the balls do more complicated things, I think representing each with its own thread is overkill.


The code that I have posted is just a humble starter's attempt at creating an animation with multiple threads, I intend to work my way up with somewhat complex animation...

Here is another excuse for a code that I have written for an animation involving multiple threads.



I fail to understand the output i.e., why don't I see 2 separate balls moving ? Why is there only 1 ball visible at any given time ?
Rob Spoor
Sheriff

Joined: Oct 27, 2005
Posts: 19682
    
  20

Because you're only drawing one oval each time. But I see quite a few other problems in this code:
- calling repaint on a thread other than the EDT.
- forgetting the call to super.paint(g) at the start of the paint method.
- trying to stop by nulling out the variables; the threads will still continue though.

I suggest you check out javax.swing.Timer. This will trigger events regularly on the EDT itself. If this interval is small enough users will see a fluent movement.


SCJP 1.4 - SCJP 6 - SCWCD 5 - OCEEJBD 6
How To Ask Questions How To Answer Questions
Unnar Björnsson
Ranch Hand

Joined: Apr 30, 2005
Posts: 164
If you intend to use multiple threads, I'd wrap them inside a an inner class that extends Thread with it's own constructor.
trish mo
Greenhorn

Joined: Feb 24, 2011
Posts: 14
Thanks for your suggestions, folks...but I am still a beginner so got to dig into your ideas & explore them a bit...will be back with updated results & doubts (hopefully soon).
Wouter Oet
Saloon Keeper

Joined: Oct 25, 2008
Posts: 2700

Unnar Björnsson wrote:If you intend to use multiple threads, I'd wrap them inside a an inner class that extends Thread with it's own constructor.

Why would you extend Thread? I would, just as he is doing now, use the Runnable interface. Because of multiple reasons.


"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." --- Martin Fowler
Please correct my English.
 
Consider Paul's rocket mass heater.
 
subject: Problem in doing animation using multithreading