1 import java.awt.*; 2 import java.awt.event.*; 3 import java.applet.*; 4 public class ShowAnimation extends Applet implements Runnable{ 5 Thread duke; 6 Image images[]=new Image[4], image; 7 int index, delay; 8 boolean flag; 9 public void init(){ 10 index=0; 11 duke=new Thread(this); 12 delay=Integer.parseInt(getParameter("delay"));//从HTML代码中<param>中获取延迟时间 13 for(int i=1; i<=4; ++i){ 14 images[i-1]=getImage(getCodeBase(), "zjy" + i + ".jpg"); 15 image=images[index]; 16 String s=i+"zjy"+1; 17 System.out.println(s); 18 } 19 //还有注意:String s="zjy" + i + 1;//因为"zjy"+i得到的是一个字符串,然后第二个'+'号在这里变成了连接符,并不是算出i+1的整数值 20 //String s=i+1+"zjy";//这时候第一个'+'就是计算两个整数值相加的,然后第二个'+'是连接符 21 addMouseListener(new MouseAdapter(){ 22 public void mousePressed(MouseEvent e){ 23 if(duke==null) 24 start(); 25 else 26 stop(); 27 } 28 }); 29 } 30 public void start(){ 31 flag=true;//表示动画开始播放 32 duke=new Thread(this); 33 //start方法把嵌入在线程中的虚拟CPU置为可运行状态,意味着它可以被调度运行,但并不意味着线程会立即运行 34 duke.start(); 35 showStatus("Click to stop!"); 36 } 37 public void stop(){ 38 flag=false; 39 duke=null; 40 showStatus("Click to start!"); 41 } 42 public void paint(Graphics g){ 43 g.drawImage(image, 0, 0, 200, 300, this); 44 } 45 46 public void run(){ 47 while(flag){//flag为false后线程将完成运行并结束,将不能再运行!所以一个线程不能多次调用start()方法! 48 repaint(); 49 try{ 50 Thread.sleep(delay); 51 }catch(InterruptedException e){ 52 53 } 54 image=images[(++index)%4]; 55 } 56 } 57 }