在JLabel中刷新相同的图像

时间:2013-10-06 08:53:34

标签: java swing jlabel imageicon

我正在尝试显示一段时间后内容发生变化的图像。我在JLabel中显示它,但问题是当我重新加载此图像时它在JLabel中没有变化,因为似乎JLabel#setIcon(new ImageIcon("myImagePath.png"));将图像缓存在内存中,当我更改它时它会查找名称,并没有从硬盘加载它。

即使我使用两个图像来翻转其数据内容是否已更改?谁知道如何解决这个问题?但每次加载不同名称的图像都能正常工作吗?

创建问题的行 例如。我的图像在按钮点击事件

上发生了变化
jlabel.setIcon("d:\\img.png");
jlabel.repaint();

1 个答案:

答案 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();有什么问题。有人知道吗?

你也可以注意到

  1. ImageIO某种程度上很慢
  2. img.getImage().flush();调用它会使图像闪烁
  3. 但如果我每次不需要拨打img.getImage().flush();时都有不同的文件名,则只需jlabel.setIcon(img);,图片就不会闪烁。