public class ImgPanel extends JPanel{
  private Image _img=null;
  private int _imgWidth,_imgHeight;      // 初始图片的长宽
  public ImgPanel() {
  }
  public void setImage(Image image){
    _img=image;
    repaint();
  }
  public void paintComponent(Graphics g){
    if(_img!=null){
      _imgWidth=_img.getWidth(this);          // 没有得到值,只返回了一个-1
      _imgHeight=_img.getHeight(this);        // 得到值了
      g.drawImage(_img,0,0,_imgWidth,_imgHeight,this);
    }
  }
}我用跟踪发现Image.getWidth(this)得到-1,而Image.getHeight(this)却能得到正确值.
by the way:图片是用这个方法得到的
Image img=Toolkit.getDefaultToolkit().createImage("C:\\1.JPG"); 然后传到这个ImgPanel中去的。

解决方案 »

  1.   

    你把this去了试试.我一直这么用没有问题的.
      

  2.   

    我也遇到了这个问题,不知道是不是sun的ToolKitImage有什么Lazy load的机制。关注中.....
      

  3.   

    我刚刚从一个老外的代码上找到了答案
    Image image = Toolkit.getDefaultToolkit().getImage(imageName);
    //the following line is important,
    //it is ensuring the pixels of the image are loaded
    image = new ImageIcon(image).getImage();
      

  4.   

    Toolkit.getDefaultToolkit().createImage( "C:\\1.JPG "),用异步的方式创建图片。当线程执行到_img.getWidth(this)语句时,创建图片的线程还没准备好图片所以会返回-1。你可以在img.getWidth 传递一个ImageObserver对象,当图片处理完通知ImageObserver后再做跟image相关的操作。或者简单点用同步方式创建图片