如果路径有问题的话,没找到图片的话。会throw MalformedURLException
但是没哟catch啊。配置没问题啊。用JB里做的

解决方案 »

  1.   

    有可能是图片还没读进来。(也就是在paint中drawImage的时候,还没法显示)我提个建议,你试试
    (1)
    在resize(imageWidth,imageHeight)下面加上system.out.println("[width]"+imageWidth+[height]+imageHeight);测试一下是否大小对不对
    如果是-1,-1,代表图片还没完整的读进来,当然无法显示了
    否则试试(2)的办法(2)
    在ImagePanel的paint里加上if(g==null){
      System.out.println("go here");
      return;
    };
    g.drawImage(image,0,0,this);如果出现go here的话,也可以证明当画的时候没有读进来
    如果确实是这种情况,那么简单的话,可以通过不断的激发paint事件来完成,当某次paint的时候正好可以了,那就画出来了。不过MediaTrack可以帮你完成这一步。(其实追根结底还是ImageObserver方面的内容,具体ImageObserver不多说,因为有可能不是这个情况。如果是的话正好你不清楚那再说不迟)就这些了,希望正是你的问题。(因为如果图片是从网络端读的话,这种可能性很大,但你是从硬盘文件读的,可能性就...试试吧)
      

  2.   

    按照 squirrelX(善忘)的方法1,的确是图片还没完整的读进来。
    那么,我该着么办呢?
    不好意思
      

  3.   

    Image _img = icon.getImage();MediaTracker tracker=new MediaTracker(this);
    tracker.addImage(_img,0);
    try{
      tracker.waitForID(0);
    }catch(InterruptedException e){
    }resize(icon.getIconWidth(),icon.getIconHeight());
    ImagePanel imagePanel=new ImagePanel(_img);关键就是中间那部分,addImage中的参数0是个ID号,因为tracker可以同时检测很多,就象下面的waitForID(0)那样实现等待的。如果想做的好一点的话,可以想想另外做个类,弄点线程,然后让这个类专门实现这样判断的功能,免得以后写类似程序都这样来一下。具体MediaTracker的实现是很简单的,你可以看看源代码。多说一点,所有通过getImage()方法得到的Image是单独在内存中的,不会因为变量而释放的,也就是无法释放掉的(除非程序结束)。当然你这里是通过ImageIcon完成的,我对那部分不是太清楚。解决方法是用Toolkit的createImage来替换,或许用不到,但这对于要写高性能的程序还是要知道的。(我说的是v1.2,后续版本的处理不清楚)