how to speed up?

i have thsis game:
http://www.fadi.at/6b/knoll/b.htm

and that’s the code:
can u tell me how 2 speed up,cause it’s damned flickering::

the code:::::::

/*

  • CLoseShooter1.java
  • Created on 21. Dezember 2002, 16:26
    */

/**
*

  • @author Johannes
    /
    import java.awt.
    ;
    import java.applet.;
    import java.awt.event.
    ;
    import java.util.*;
    import java.applet.Applet;
    public class CLoseShooter2 extends Applet{
    int m_treffer,kaputt;
    Font m_anzeiger;
    String m_tref;
    Image m_bild;
    Canvas malFlaeche;
    Canvas oben,rechts,unten,links,stats;
    CAlien a;
    AudioClip ac;
    Zerstorer zt;
    public CLoseShooter2()
    {
    m_tref="";
    m_anzeiger=new Font(“Arial”,Font.BOLD,20);
    MediaTracker laden=new MediaTracker(this);
    try
    {
    ac=getAudioClip(getCodeBase(),“moan.wav”);
    laden.waitForAll();
    ac.loop();

     }
     catch(Exception e){
     ;
     }
     
     //m_bild =getImage(getCodeBase(),"alienboese.gif");
     /*
     laden.addImage(m_bild,0);
     try
     {
         laden.waitForID(0);
     }
     catch(InterruptedException e){
         m_bild=null;
         return;
     }
     */
     kaputt=0;
     setLayout(new BorderLayout());
     m_treffer=0;
     oben=new Canvas();
     unten=new Canvas();
     rechts=new Canvas();
     links=new Canvas();
     stats=new Canvas();
     stats.setBackground(Color.yellow);
     oben.setBackground(Color.red);
     unten.setBackground(Color.red);
     links.setBackground(Color.red);
     rechts.setBackground(Color.red);
     stats.setSize(400,10);
     oben.setSize(800,10);
     unten.setSize(400,10);
     rechts.setSize(10,480);
     links.setSize(10,480);
     malFlaeche=new Canvas();
     malFlaeche.setBackground(Color.gray);
     malFlaeche.setForeground(Color.red);
     malFlaeche.setSize(780, 480);
     add("Center",malFlaeche);
     add("North",oben);
     add("East",rechts);
     add("West",links);
     add("South",unten);
     //add("South",stats);
     malFlaeche.addMouseListener(new CMaus());
    

    }
    public void init(){
    double tmp1=(Math.random()*780)+10;
    double tmp2=Math.random()*480+10;
    a=new CAlien(malFlaeche,(int) tmp1,(int)tmp2);
    a.start();
    m_treffer++;
    m_tref="Lose : "+String.valueOf(m_treffer);
    if(kaputt==1){
    zt.stop();
    }
    zt=new Zerstorer(malFlaeche);
    zt.start();
    }
    public void aufraumen(){
    Graphics g=malFlaeche.getGraphics();
    g.setColor(Color.gray);
    g.fillRect(a.m_xPos,a.m_yPos,37,37);
    g.fillRect(zt.xPos,zt.yPos,zt.breite+10,zt.hohe+10);
    }
    public void tststs()
    {
    zt.stop();
    init();
    }

class CMaus extends MouseAdapter
{
public void mousePressed(MouseEvent f){
int ax=f.getX();
int ay=f.getY();
if(ax>=a.m_xPos && ax<=a.m_xPos+30){
if(ay>=a.m_yPos && ay<=a.m_yPos+30){
aufraumen();
malFlaeche.setForeground(Color.green);
a.stop();
zt.stop();
init();
}
}
}
}

class CAlien extends Thread
{
Canvas anzeige;
int m_xPos,m_yPos;
int m_xGo,m_yGo;//Schrittweite
public CAlien(Canvas a,int x,int y){
anzeige=a;
m_xPos=x;
m_yPos=y;
m_xGo=7;
m_yGo=13;
}
public CAlien(Canvas a){
anzeige=a;
double xtmp=(Math.random()*780)+10;
double ytmp=(Math.random()*480)+10;
m_xPos=(int)xtmp;
m_yPos=(int)ytmp;
}
public void run(){
anzeigen();
while(isInterrupted()==false){
bewegen();
try
{
sleep(40);
}
catch(InterruptedException e){
return;
}
}
}
void anzeigen(){

    Graphics g=anzeige.getGraphics();
    g.setFont(m_anzeiger);
    g.setColor(Color.black);
    g.fillOval(m_xPos+5,m_yPos+5,30,30);
    g.setColor(Color.orange);
    g.fillOval(m_xPos, m_yPos,30,30);
    g.setColor(Color.black);
    g.fillOval(m_xPos+9,m_yPos+6,3,3);
    g.fillOval(m_xPos+17,m_yPos+6,3,3);
    g.drawRect(m_xPos+7,m_yPos+18,16,4);
    g.setColor(Color.black);
    g.drawString(m_tref,350,470);
    g.setColor(Color.black);
    g.fillRect(zt.xPos+5,zt.yPos+5,zt.breite,zt.hohe);
    g.setColor(Color.red);
    g.fillRect(zt.xPos,zt.yPos,zt.breite,zt.hohe);
    g.dispose();
    
}
void bewegen(){
    int xNeu,yNeu;
    Graphics g=anzeige.getGraphics();
    Dimension m=anzeige.getSize();
    xNeu=m_xPos+m_xGo;
    yNeu=m_yPos+m_yGo;
    if(xNeu<0){
        xNeu=0;
        double tmp=(Math.random()*15)+5;
        m_xGo=(int)tmp;
    }
    if(xNeu+30 >=m.width){
        xNeu=m.width-30;
        double tmp=(Math.random()*15)+5;
        m_xGo=(int)-tmp;
    }
    if(yNeu<0){
        yNeu=0;
        double tmp=(Math.random()*15)+5;
        m_yGo=(int)tmp;
    }
    if(yNeu+30>=m.height){
        yNeu=m.height-30;
        double tmp=(Math.random()*15)+5;
        m_yGo=(int)-tmp;
    }
    g.setColor(Color.gray);
    g.fillRect(m_xPos-1,m_yPos-1,m_xPos+37,m_yPos+37);
    g.fillRect(380,450,100,40);
    m_xPos=xNeu;
    m_yPos=yNeu;
    anzeigen();
    g.dispose();
}

}

class Zerstorer extends Thread
{
Canvas zeichner;
int xPos,yPos,breite,hohe,go;
public Zerstorer(Canvas a){
zeichner=a;
xPos=250;
yPos=250;
hohe=10;
breite=50;
go=5;
}
void bewegen(){
Graphics g=zeichner.getGraphics();
Dimension m=zeichner.getSize();
int xNeu;
xNeu=xPos+go;
if(xNeu<=0)
{
xNeu=0;
go=-go;
}
if(xNeu+breite>=m.width){
xNeu=m.width-breite;
go=-go;
}
g.setColor(Color.gray);
g.fillRect(xPos-5,yPos-5,breite+10,hohe+10);
xPos=xNeu;
g.dispose();
if(a.m_xPos+35>=xPos && xPos>=a.m_xPos){
if(a.m_yPos<=260 || a.m_yPos>220){
//m_treffer–;
//a.stop();
//aufraumen();
//tststs();
}
}
}
public void run(){
while(isInterrupted()==false){
bewegen();
breite+=1;
try
{
sleep(50);
}
catch(InterruptedException e){
;
}
}

     }

     }

}

This might help:

http://www.java-gaming.org/cgi-bin/JGOForums/YaBB.cgi?board=Tuning;action=display;num=1040642661

Maybe you should use double buffering?