package drawing;
import java.awt.*;
import java.awt.event.*;
class Draw extends Canvas

  Toolkit tool;
  Image img;
  Draw()
  {   
setSize(200,200);
tool=getToolkit();
img=tool.getImage("boy.gif");
  }
  public void paint(Graphics g)
  { g.drawImage(img,10,10,img.getWidth(this),img.getHeight(this),this);
   
  }
  public Image getImage()
  {
  return img;
  }
}
public class ImageCanvas
{  public static void main(String[] args) 
  {  Draw canvas=new Draw();
     Frame frame=new  Frame();
     frame.add(canvas,BorderLayout.CENTER);
     frame.setSize(300,300);
     frame.setVisible(true);
     frame.setIconImage(canvas.getImage());
     frame.validate();
     frame.addWindowListener(new WindowAdapter(){
         public void windowClosing(WindowEvent e){
             System.exit(0);
         }
     });
  }}上面的程序是在应用程序中绘制图像,boy.gif放在project的bin文件夹下面。运行程序,始终不能显示绘制的图标,窗口左上角的还是画布上的,都没有显示图像,这个是怎么回事???
 

解决方案 »

  1.   

    在Draw.java的同一级目录下新建一个文件夹,名称为images,将图片放入到images文件夹下,img=tool.getImage("boy.gif");
    这句代码改为img = tool.getImage(Draw.class.getResource("images/boy.gif"));
      

  2.   

    你目前放的位置应该是和相应的class文件一个目录
      

  3.   

    楼上所说的Draw.java是没有这个类,不知楼上说的是主类ImageCanvas.java,还是这个主类所在的包,我在包
    drawing中建了images文件夹行不通,在project中建文件夹images也行不通,提示的错误是Uncaught error fetching image:
    java.lang.NullPointerException
    at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:115)
    at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:125)
    at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:263)
    at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)
    at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)
    并且窗口也不能关闭,不知这个是什么情况???
      

  4.   

    Draw.class.getResource("images/boy.gif")都是以操作的Draw.class的路径为标准来定位文件的,你将Draw和主类ImageCanvas写在一个java文件中,但是生成的是2个单独的class文件,你在.java的同一级目录下新建一个文件夹,名称为images,在编译过程中,ide工具(eclipse)会在相应的bin文件夹中生成对应的images文件夹。你需要弄明白boy.gif相对于Draw.class的相对路径就可以找到相应的文件了
      

  5.   

    按照楼上所说的我在.java的同一级目录下新建一个文件夹images,提示错误Uncaught error fetching image。当我在.class新建images文件夹时,首次编译ImageCanvas.java文件,如果写成Draw.class.getResource("images/boy.gif"),提示错误是:找不到或无法加载主类,当使用ImageCanvas.class.getResource("images/boy.gif")能够正常显示,编译一次后,写成刚才的格式Draw.class就没问题了,这儿应该是把.class文件作为作为加载图片的通道。还有这儿的.gif如果是动态图片,在画布上还是不能显示,这个是怎么回事??
      

  6.   

    1.写成Draw.class.getResource("images/boy.gif"),提示错误是:找不到或无法加载主类  是因为没有编译生成Draw.class,你编译了一次生成了Draw.class,所以就没有问题了。Draw.class.getResource是以Draw.class的路径来加载资源了。
    2..gif如果是动态图片,在画布上还是不能显示,估计应该是图片有很多帧,可以把图片分为几个帧来加载