JLabel picture;
public Check() {
picture = new JLabel(createImageIcon("images\\exit.png"));
add(picture, BorderLayout.WEST);
}
public void actionPerformed(ActionEvent e) {
picture.setIcon(createImageIcon("images\\update.png"));
}
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = Check.class.getResource(path);
System.err.println(imgURL);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
我的路径总是为null,可能是什么问题
当我以另一种方式测试时,图像路径是正确的,
public Check() {
String imgStr = "images\\exit.png";
ImageIcon image = new ImageIcon(imgStr);
JLabel label1 = new JLabel(image, JLabel.CENTER);
JPanel South = new JPanel();
South.add(label1);
add("South", South);
}
图像出现,但这是在我运行时完成的,图像已经存在,而不是当我点击按钮时。
谢谢
答案 0 :(得分:0)
请尝试picture.setIcon(createImageIcon("/images/update.png"));
,因为看起来您的图像是从类路径加载的。
见这里:
查找具有给定名称的资源。如果不是,则此方法返回null 找到具有此名称的资源。搜索资源的规则 与给定类关联的是由*定义类实现的 班级装载机。
这个方法在调用之后将调用委托给它的类加载器 更改资源名称:如果资源名称以“/”开头,则为 没有变化;否则,包名称将预先添加到资源中 转换后的名称“。”至 ”/”。如果这个对象是由 bootstrap loader,将调用委托给 ClassLoader.getSystemResource。
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#getResource%28java.lang.String%29
答案 1 :(得分:0)
或者您只需在动作执行方法中添加此行。
picture = new JLabel(new ImageIcon("/images/update.png"));