package imagetest;import java.applet.Applet;
import java.awt.HeadlessException;
import java.awt.*;public class MultiThread extends Applet implements Runnable
{
private Image[] imgs;
private int totalImage=10;
private int currentImage;
private Image imgBuf;
private Graphics gBuf;
private MediaTracker mt;
private boolean bStop=false; public void init()
{
mt=new MediaTracker(this);
imgBuf=createImage(600,400);
gBuf=imgBuf.getGraphics();
gBuf.setColor(Color.WHITE);
gBuf.fillRect(0,0,600,400);
imgs=new Image[totalImage];
for(int i=0;i<totalImage;i++)
{
imgs[i]=getImage(getDocumentBase(),"T"+(i+1)+".gif");
mt.addImage(imgs[i],i);
}
try {
mt.waitForID(0);
}
catch (Exception ex) {
ex.printStackTrace();
}
} public void start()
{
currentImage=0;
gBuf.drawImage(imgs[currentImage],50,50,this);
currentImage=1;
new Thread(this).start();
} public void stop()
{
bStop=true;
} public void paint(Graphics g)
{
System.out.println("draw:"+currentImage);
g.drawImage(imgBuf,50,50,this);
} public void update(Graphics g)
{
paint(g);
} public void run()
{
while(!bStop)
{
if (mt.checkID(currentImage, true))
{
gBuf.fillRect(0, 0, 600, 400);
gBuf.drawImage(imgs[currentImage], 50, 50, this);
currentImage = ++currentImage % 10;
} try
{
Thread.sleep(400);
}
catch (Exception ex)
{
//ex.printStackTrace();
}
repaint();
}
}
}这个类里边到底是先执行start()方法呢?还是先执行paint()方法?为什么?
import java.awt.HeadlessException;
import java.awt.*;public class MultiThread extends Applet implements Runnable
{
private Image[] imgs;
private int totalImage=10;
private int currentImage;
private Image imgBuf;
private Graphics gBuf;
private MediaTracker mt;
private boolean bStop=false; public void init()
{
mt=new MediaTracker(this);
imgBuf=createImage(600,400);
gBuf=imgBuf.getGraphics();
gBuf.setColor(Color.WHITE);
gBuf.fillRect(0,0,600,400);
imgs=new Image[totalImage];
for(int i=0;i<totalImage;i++)
{
imgs[i]=getImage(getDocumentBase(),"T"+(i+1)+".gif");
mt.addImage(imgs[i],i);
}
try {
mt.waitForID(0);
}
catch (Exception ex) {
ex.printStackTrace();
}
} public void start()
{
currentImage=0;
gBuf.drawImage(imgs[currentImage],50,50,this);
currentImage=1;
new Thread(this).start();
} public void stop()
{
bStop=true;
} public void paint(Graphics g)
{
System.out.println("draw:"+currentImage);
g.drawImage(imgBuf,50,50,this);
} public void update(Graphics g)
{
paint(g);
} public void run()
{
while(!bStop)
{
if (mt.checkID(currentImage, true))
{
gBuf.fillRect(0, 0, 600, 400);
gBuf.drawImage(imgs[currentImage], 50, 50, this);
currentImage = ++currentImage % 10;
} try
{
Thread.sleep(400);
}
catch (Exception ex)
{
//ex.printStackTrace();
}
repaint();
}
}
}这个类里边到底是先执行start()方法呢?还是先执行paint()方法?为什么?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货