(参考)
import java.awt.image.*;
 import java.awt.*;
 import java.net.*; public class app extends java.applet.Applet {
   Image source;
   Image resizedImage;   public void init() {
     MediaTracker media = new MediaTracker(this);
     // java how-to image for example
     source = getImage(getDocumentBase(),"jht.gif");
     media.addImage(source,0);
     try {
       media.waitForID(0);
       // scale down, half the original size  
       ImageFilter replicate = 
          new ReplicateScaleFilter
            (source.getWidth(this)/2, source.getHeight(this)/2);
       ImageProducer prod = 
          new FilteredImageSource(source.getSource(),replicate);
       resizedImage = createImage(prod);
       media.addImage(resizedImage,1);
       media.waitForID(1);
       } 
     catch(InterruptedException e) {}
     }   public void paint(Graphics g) {
     g.drawImage(source, 10,10,this);
     g.drawImage(resizedImage,10, 80,this);
     }
 }

解决方案 »

  1.   

    java加载图象是异步的。也就是说,在你执行到getwidth时,它还不一定读完图象。所以当然是-1了。
    你可以用下面的程序等待加载MediaTracker media = new MediaTracker(this);
    media.addImage(your_Image,1);
    media.waitForID(1);
      

  2.   

    image的本地对等类还没有创建,看addNotify.
      

  3.   

    你可以通过双缓冲技术加载图片,再用getWidth,由于你取图片高度的时候可能图片还没有加载完。