在网页上提示:start:applet not initialized.错误
我的JSP文件和CLASS是放在同一目录下的,请达人帮我看看是什么错误,我把CLASS都贴出来
test.jsp文件:
<html>
<body>
<jsp:plugin
  type         =   "applet"
  code         =   "Defend.class"
  codebase     =   "."
  jreversion   =   "1.2"
  width        =   "300"
  height       =   "500"
>
</jsp:plugin> 
</body>
</html>Bomb类:
import java.applet.AudioClip;
import java.awt.Color;
import java.awt.Graphics;public class Bomb {
  int bx;//炸弹的初始x坐标
  int by;//炸弹的初始y坐标
  int r;//炸弹的的半径
  Color bColor;//炸弹的颜色
  AudioClip bAudio;//炸弹的声音
  Defenser def;//积分  private final int lowy=480;
  private final int upy=20;  public Bomb(int bx,int by,int r,Color bColor,AudioClip bAudio,Defenser def){
    this.bx=bx;
    this.by=by;
    this.r=r;
    this.bColor=bColor;
    this.bAudio=bAudio;
    this.def=def;
  }  //画出炸弹图形
  public void DrawBomb(Graphics g){
    g.setColor(bColor);
    g.fillOval(bx,by,r,r);
  }  //炸弹移动
  public boolean down(){
    by+=def.getSpeed();
    return wasHitEarth();
  }  //反向回弹炸弹,并根据积分加快炸弹速度
  public void isRebound(){
    def.addSpeed();
  }  //是否点中炸弹,如果是,则积分增加,并且炸弹消失,炸弹从初始位置重新开始
  public boolean userHit(int mx,int my){
    double x=bx-mx;
    double y=by-my;
    double dis=Math.sqrt(x*x+y*y);
    if(dis<r){
      def.addScore(1);
      return true;
    }
    else{
      return false;
    }
  }  //炸弹是否碰地,如果碰地生命减少
  public boolean wasHitEarth(){
    if(by>lowy){
      bAudio.play();
      return true;
    }
    else{
      return false;
    }
  }
}Defend类:
import java.applet.Applet;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.applet.AudioClip;
import java.awt.Cursor;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.util.Random;public class Defend extends Applet implements Runnable,MouseListener{
  private Defenser def;
  private Bomb[] bombs;
  private int count;  Thread th;
  Cursor c;
  Color clist;  AudioClip deathSound;
  AudioClip exploseSound;  Random rand=new Random();  private Image bgImage;
  private Graphics bg;  //初始化所有对象,包括声音文件的加载,Bomb类的生成,鼠标的形状等
  public void init(){
    //初始化鼠标形状
    c=new Cursor(Cursor.HAND_CURSOR);
    this.setCursor(c);
    //初始化炸弹个数
    count=6;
    //设置背景颜色
    setBackground(Color.BLACK);
    //设置鼠标监听
    addMouseListener(this);
    //初始化Defenser类
    def=new Defenser(0,10,2);
    //加载声音文件
    deathSound=getAudioClip(getCodeBase(),"death.wav");
    exploseSound=getAudioClip(getCodeBase(),"gun.wav");
    //初始化Bomb类
    addBomb(count);
  }  public void start(){
    th=new Thread(this);
    th.start();
  }  public void stop(){}  public void destroy(){
    removeMouseListener(this);
  }  public void run(){
    while(true){
      if(def.getLife()>0){
        for(int i=0;i<bombs.length;i++){
          if(bombs[i].down()){
            def.death(1);
            addBombNew(i);
          }
        }
        repaint();
        try {
          Thread.sleep(20);
        }
        catch (InterruptedException ex) {
          ex.printStackTrace();
        }
      }
    }
  }  public void addBomb(int n){
    bombs=new Bomb[n];    for(int i=0;i<n;i++){
      clist = new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255));
      bombs[i]=new Bomb(rand.nextInt(260),20+i*5,20,clist,deathSound,def);
    }
  }  public void addBombNew(int i){
    clist = new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255));
    bombs[i]=new Bomb(rand.nextInt(260),20+i*5,20,clist,deathSound,def);
    def.addSpeed();
  }  public void paint(Graphics g){
    if(def.getLife()>0){
      g.setColor(Color.green);
      g.drawString("分数:"+def.getScore(),10,40);
      g.drawString("生命:"+def.getLife(),200,40);
      for(int i=0;i<bombs.length;i++){
        bombs[i].DrawBomb(g);
      }
    }
    else if(def.getLife()<=0){
      g.setColor(Color.green);
      g.drawString("Game Over",90,240);
      g.drawString("总得分:"+def.getScore(),90,300);
    }
  }  //双缓冲图像
  public void update(Graphics g){
    //如果bgImage为空,则初始化
    if(bgImage==null){
      bgImage=createImage(this.getSize().width,this.getSize().height);
      bg=bgImage.getGraphics();
    }
    //设置bg的背景颜色
    bg.setColor(getBackground());
    //填充长方形框架
    bg.fillRect(0,0,this.getSize().width,this.getSize().height);
    //设置bg的前景色
    bg.setColor(getForeground());
    paint(bg);
    g.drawImage(bgImage,0,0,this);
  }  public void mouseClicked(MouseEvent e){}  public void mouseEntered(MouseEvent e){}  //鼠标点击事件处理
  public void mousePressed(MouseEvent e){
    int mx=e.getX();
    int my=e.getY();    for(int i=0;i<bombs.length;i++){
      //判断鼠标是否点击到炸弹
      if(bombs[i].userHit(mx,my)){
        exploseSound.play();
        bombs[i].isRebound();
        addBombNew(i);
      }
    }
  }  public void mouseExited(MouseEvent e){}  public void mouseReleased(MouseEvent e){}  }
Defenser 类:
public class Defenser {
  private int score;//积分
  private int life;//生命
  private int speed;//速度  public Defenser(int score,int life,int speed){
    this.score=score;
    this.life=life;
    this.speed=speed;
  }  //取得当前积分值
  public int getScore(){
    return score;
  }  //取得当前生命值
  public int getLife(){
    return life;
  }  //取得当前的速度
  public int getSpeed(){
    return speed;
  }  //积分增加
  public void addScore(int n){
    score+=n;
    if(score>0&&score%20==0){
      life++;
    }
  }  //生命减少
  public void death(int n){
    life-=n;
  }  //速度增加
  public void addSpeed(){
    if(score>0&&score%100==0){
      speed++;
    }
  }
}