首先我使用了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);
答案 0 :(得分:0)
问题是图像所在的位置。我总是将图像直接保存在“src”和“bin”所在的目录中。 “但getClass()。getResource(”...“)”返回bin的路径。所以我只需要将图像文件夹移动到“src”中,这样它就会自动将这个目录复制到'bin'中。问题解决了。
URL imgUrl = getClass().getResource("images/contacts.png");
返回 - > Q:\workspace\project name\bin\images\contacts.png