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 }