0

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

线程“主”java.lang.IllegalArgumentException 中的异常:输入 == null!

好吧,我的代码如下..

开始菜单

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

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

}

图像面板

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);
4

1 回答 1

0

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

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

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

于 2012-05-28T15:42:22.180 回答