moving images in a game loop

hi,
I’m trying to setup a basic gameloop.
it runs but animation isn’t smooth ( lots of flicker ).
as a personalJava application it must be compatible with jdk 1.1
what’s wrong with this code?
can you help me? thanks.
eml

import java.awt.;
import java.awt.event.
;

//-----------------------Engine-------------------------------------------------
public class Engine extends Frame implements ActionListener {
public LevelOne levOne;
public static void main (String[] args) {
Engine engine = new Engine();
}
public Engine() {
levOne = new LevelOne();
levOne.setSize(300, 300);
add(“Center”, levOne);
addWindowListener(new winExit());
setLayout ( new FlowLayout());
setSize( 300, 300);
this.setBackground(levOne.black);
show();
}
public void actionPerformed(ActionEvent e)
{
dispatchEvent( new WindowEvent( this, WindowEvent.WINDOW_CLOSING));
}
}
//----------------------------winExit-------------------------------------------
class winExit extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
//--------------------------LevelOne--------------------------------------------
class LevelOne extends Canvas implements MouseMotionListener, Runnable {
Thread t;
Image offscreenImage;
Graphics offscreenGraphics;
Color black = new Color(0, 0, 0);
Image background1, sprite1;
Toolkit toolkit = Toolkit.getDefaultToolkit();
int posX = 50, posY = 50;
LevelOne(){
background1 = toolkit.getImage(“bacground.jpg”);
sprite1 = toolkit.getImage(“sprite.gif”);
t = new Thread(this, “LevelOne”);
t.start();
}
public void run(){
for ( ;; ) {
try {
posY++;
if (posY > 300) posY = 0;
t.sleep(16);
repaint();
} catch (InterruptedException e) {}
}
}
public void paint(Graphics g) {
if(offscreenImage==null) {
// set up a simple double buffer
offscreenImage = createImage(this.size().width, this.size().height);
offscreenGraphics = offscreenImage.getGraphics();
}
offscreenGraphics.drawImage(background1, 0, 0, this);
offscreenGraphics.drawImage(sprite1, posX, posY, this);
g.drawImage(offscreenImage, 0, 0, this);
}
public void mouseMoved(MouseEvent e){}
public void mouseDragged(MouseEvent e){}
}

Instad of calling repaint, get the Graphics object with getGraphics() and use it directly. You must also override “public void update(Graphics g)”. It will clear the background with the background color wich causes flickering.

Absoultely on the second.

On the first you need to be very careful. AWT and Swing are NOT thread safe and expect to render from the AWT event thread not from your main thread.

If you want to try to render from your main loop you really should be using the “Full Screen Exclusive” mode API that was added in JDK1.4