我正在尝试显示一段时间后内容发生变化的图像。我在JLabel
中显示它,但问题是当我重新加载此图像时它在JLabel
中没有变化,因为似乎JLabel#setIcon(new ImageIcon("myImagePath.png"));
将图像缓存在内存中,当我更改它时它会查找名称,并没有从硬盘加载它。
即使我使用两个图像来翻转其数据内容是否已更改?谁知道如何解决这个问题?但每次加载不同名称的图像都能正常工作吗?
创建问题的行 例如。我的图像在按钮点击事件
上发生了变化jlabel.setIcon("d:\\img.png");
jlabel.repaint();
答案 0 :(得分:5)
我使用 ImageIO
解决了这个问题try {
BufferedImage bufImg=ImageIO.read(new File("d:\\img.png"));
jlabel.setIcon(new ImageIcon(bufImg));
//jlabel.repaint();
//works even without repaint
}
catch (IOException ex) {
System.out.println("Unable to read image file");
}
感谢 nIcE cOw 同时使用mKorbel's answer作为
ImageIcon img=new ImageIcon("D:\\img.png");
img.getImage().flush();
jlabel.setIcon(img);
但如果我不致电setIcon()
,请不要知道img#getImage()#flush();
有什么问题。有人知道吗?
你也可以注意到
ImageIO
某种程度上很慢img.getImage().flush();
调用它会使图像闪烁img.getImage().flush();
时都有不同的文件名,则只需jlabel.setIcon(img);
,图片就不会闪烁。