我用了MediaTracker 后 , 为什么 paint方法被不停的调用?
import java.awt.event.*;
import java.awt.*;
public class test1 {
public static void main(String args[]) {
new SplashWindowFrame();
}
}
class SplashWindowFrame extends Frame {
SplashWindow sw;
Image splashIm;
SplashWindowFrame() {
super();
/* Add the window listener */
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
dispose();
System.exit(0);
}});
/* Size the frame */
setSize(200,200);
/* Center the frame */
Dimension screenDim =
Toolkit.getDefaultToolkit().getScreenSize();
Rectangle frameDim = getBounds();
setLocation((screenDim.width - frameDim.width) / 2,
(screenDim.height - frameDim.height) / 2);
MediaTracker mt = new MediaTracker(this);
splashIm = Toolkit.getDefaultToolkit(
).getImage("test.gif");
mt.addImage(splashIm,0);
try {
mt.waitForID(0);
} catch(InterruptedException ie){}
sw = new SplashWindow(splashIm);
this.add(sw, BorderLayout.CENTER);
try {
Thread.sleep(3000);
} catch(InterruptedException ie){}
/* Show the frame */
setVisible(true);
}
}
class SplashWindow extends Panel {
Image splashIm;
SplashWindow(Image splashIm)
{
this.splashIm = splashIm;
setSize(200,200);
/* Center the window */
Dimension screenDim =
Toolkit.getDefaultToolkit().getScreenSize();
Rectangle winDim = getBounds();
setLocation((screenDim.width - winDim.width) / 2,
(screenDim.height - winDim.height) / 2);
setVisible(true);
}
public void paint(Graphics g) {
System.out.println("paint");
if (splashIm != null) {
g.drawImage(splashIm,0,0,this);
}
}
}