Re: Small Java Applet freezing web browser
Oliver Wong wrote:
news:1153845308.314980.111390@i3g2000cwc.googlegroups.com...
The way to do animations is to draw a single frame, and then exit the
paint method. Then, the next time you enter the paint method, draw the next
frame, and so on. Instead, you're staying in the paint method for the entire
duration of the animation, paint all the frames, and then exiting the
method.
- Oliver
That was it, thanks. The following code works like a charm.
package applets;
import java.awt.*;
import java.applet.*;
public class ProjectileAnimation extends Applet implements Runnable
{
double Xo = 0.0;
double Yo = 0.0;
double Vo = 0.0;
double x = 0.0;
double y = 0.0;
double theta = 0.0;
double t = 0.0;
Thread animator;
public void init() {
setBackground(Color.white);
}
public void start() {
Vo = Double.parseDouble(getParameter("Vo"));
theta = Double.parseDouble(getParameter("theta"));
animator = new Thread(this);
animator.start();
}
public void run() {
while ((Thread.currentThread() == animator) &&
((int)Math.round(y) >= 0)) {
// Display the next frame of animation.
repaint();
// Delay for a while
try {
Thread.sleep(500);
} catch (InterruptedException e) {
break;
}
}
}
public void paint( Graphics g )
{
g.drawLine(0,0,0,410);
g.drawLine(0,409,710,409);
g.setColor(Color.black);
x = Vo * Math.cos(Math.toRadians(theta)) * t;
y = .5 * -9.8 * Math.pow(t, 2) + Vo * t + Yo;
y = 500 - y;
g.fillOval((int)Math.round(x), (int)Math.round(y), 5,
5);
t += .5;
}
public void update ( Graphics g ) {
paint(g);
}