2

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

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

行创建问题: 例如,我的图像在按钮单击事件上发生了变化

jlabel.setIcon("d:\\img.png");
jlabel.repaint();
4

1 回答 1

6

我已经通过使用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 的回答一起工作

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);,图像不会闪烁。
于 2013-10-06T09:13:16.137 回答