使用ImageIO.read将图像添加到myPanel

时间:2012-04-15 17:47:56

标签: java jar jpanel drawimage javax.imageio

首先我使用了JLabel和ImageIcon。它工作正常。但是,当我将图像导出到JAR时,图像不会显示。
所以,然后我创建了自己的ImagePanel并使用drawImage方法来显示它。 但它会终止并抛出一个

  线程“main”中的

异常java.lang.IllegalArgumentException:输入   == null!

好吧,我的代码如下:

STARTMENU

public class startMenu extends JFrame{
  ...
  URL imgUrl = getClass().getResource("images/contacts.png");

  public startMenu(){
    ...
    ImagePanel imgPanel = new ImagePanel(imgUrl);
  }

}

ImagePanel

public class ImagePanel extends JPanel{

    private Image image;
    private URL imgUrl;

 public ImagePanel(URL url){
        this.imgUrl= url;

        try{    
            image = ImageIO.read(imgUrl);
        } 
        catch (IOException e) {
            System.out.println("no such file");
        }
    }

 @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if(image!=null){
             g.drawImage(image, 10, 12, 128, 128, this);
        }
        else{
            g.drawImage(image, 0, 0, this);
        }
    }

    @Override
    public Dimension getPreferredSize() {
       return new Dimension(150,150);
    }
}

如果我将ImageIcon与imageUrl一起使用。它显示相同的错误消息。

  URL imgUrl = getClass().getResource("images/contacts.png");
    private ImageIcon adBook = new ImageIcon(imgUrl);
    private JLabel mainImg = new JLabel(adBook);

1 个答案:

答案 0 :(得分:0)

问题是图像所在的位置。我总是将图像直接保存在“src”和“bin”所在的目录中。 “但getClass()。getResource(”...“)”返回bin的路径。所以我只需要将图像文件夹移动到“src”中,这样​​它就会自动将这个目录复制到'bin'中。问题解决了。

URL imgUrl = getClass().getResource("images/contacts.png");

返回 - > Q:\workspace\project name\bin\images\contacts.png