实现了ImageObserver的类,其imageUpdate方法究竟在何种时间下才会得到调用?
以下代码无法达到目的,原因在哪?// 篇幅所限 import 部分省略
public class ImgObFrame extends JFrame{
public ImgObFrame() {
Container container = getContentPane();
JPanel panel = new ImgPanel();
container.add(panel);
}


public static void main(String[] args) {
ImgObFrame frame = new ImgObTest();
frame.setVisible(true);
}
}class ImgPanel extends JPanel {

Image myImage;

public void paintComponent(Graphics g) {
super.paintComponent(g);
try{
File f = new File("1.jpg");
myImage = ImageIO.read(f);
}catch(IOException ioe) {
System.out.println(ioe);
}
if(myImage == null) {
return;
}
                  //显示一幅图片,将自身设为ImageObserver
g.drawImage(myImage, 0, 0, this);  }

         // 重载imageUpdate方法
public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
//但调试过程中该方法未曾调用!!!
boolean error;
if((infoflags & ALLBITS)!=0) {
error = false;
}else if((infoflags & ERROR)!=0) {
error = true;
}else {
error = false;
}
boolean done = !((infoflags & (ALLBITS | ERROR| ABORT)) == 0);
return !done;
}

}谢谢指点

解决方案 »

  1.   

    你把
    File f = new File("1.jpg");
    myImage = ImageIO.read(f);
    改成
    myImage = getImage(getCodeBase(),"1.jpg");
    试试
      

  2.   

    drawImage()在第一次被调用时,没有图像被加载。所以也就没有图像位可以绘制,drawImage()仅仅向和图像相关的图像生产者注册图像观察者。所以当调用返回时什么也不绘制。
        调用drawImage()返回之后,只要有图像的新的部分被加载,图像观察者中的imageUpdate()就会被调用。