主要用到JAVA中的线程,import java.awt.*;
import java.applet.*;
import java.awt.event.*;class Mycanvas extends Canvas implements Runnable  //在画布中实现运动,即线程接口
{
Image img1,img2;
Toolkit toolkit;
int x,y;
Thread thread;
Mycanvas()
{
getSize();
setBackground(Color.cyan);
x=150;
y=250;
toolkit=getToolkit();
//toolkit=Toolkit.getDefaultToolkit();  注:这两种方法都可行
img1=toolkit.getImage("img1.jpg");  //获得图像
img2=toolkit.getImage("car1.gif");
thread=new Thread(this);
thread.start();
}
public Dimension getPreferredSize()
{
return new Dimension(800,350);
}
public void paint(Graphics g)
{
g.drawImage(img1,50,50,x,y,this);  //绘制图像
g.drawImage(img2,430,50,x,y,this);
g.drawString("〈---JPG格式图像!",305,180);
g.drawString("GIF格式图像!---〉",325,250);
}
//下面三行代码可克服图像闪烁,即重写了update函数
/*public void update(Graphics g)
{
paint(g);
}*/
public void run()  //线程控制
{
while(true)
{
if((x<=450))   //图像慢慢变大
{
x+=1;
y+=1;
repaint();
}
else 
{
x=150;
y=250;
}
try
{
thread.sleep(50);
}catch(InterruptedException e){}
}
}
}
class Mywindow extends Frame
{
Mywindow(String s)
{
super(s);
setVisible(true);
setBackground(Color.cyan);
setSize(800,500);
setLayout(new BorderLayout());
Mycanvas canvas;
canvas=new Mycanvas();
add(canvas,"Center");
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
});
}
}
public class ImageEventDemo1
{
public static void main(String args[])
{
Mywindow window;
window=new Mywindow("调用图像--利用线程逐步放大");
window.setVisible(true);
}
}

解决方案 »

  1.   

    请问我要把程序的代码放在边上,使图形和代码(用列表显示在边上,就是算法执行到哪一行也显示出相应的图形)显示同步,是不是要用到timer,具体怎么用呢?楼上大哥能不能帮忙解释一下
      

  2.   

    用TIMER可以是可以,但是每一步执行多少时间你能够知道吗?而且计算机执行速度很快的,人工难以计算啊,我个人认为还是用线程,每执行一行代码使一个线程激活,当执行完毕后使该线程呈阻塞状态或让该线程死忘,再去执行下一个线程(及下一句代码)
      

  3.   

    线程之间可以用wait,notify同步,让主线程去唤醒动画线程