在JLabel中刷新相同的图像

a q*_*ion 1 java swing jlabel imageicon

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

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

创建问题的行: 例如我的图像在按钮单击事件上更改

jlabel.setIcon("d:\\img.png");
jlabel.repaint();
Run Code Online (Sandbox Code Playgroud)

a q*_*ion 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");
}
Run Code Online (Sandbox Code Playgroud)

感谢漂亮的母牛也有工作mKorbel的回答

ImageIcon img=new ImageIcon("D:\\img.png");
img.getImage().flush();
jlabel.setIcon(img);
Run Code Online (Sandbox Code Playgroud)

setIcon()如果我不打电话,不知道有什么问题img#getImage()#flush();.谁知道?

你也可以注意到

  1. ImageIO 某种程度上很慢
  2. img.getImage().flush(); 调用它会闪烁图像
  3. 但如果我每次有不同的文件名,没有必要要求img.getImage().flush();只去上jlabel.setIcon(img);和图像不闪烁.

  • `但不知道setIcon()有什么问题.有人知道吗?` - 有什么问题?图像被缓存,因此你需要创建一个新的图标,正如mKobel的答案所证明的那样. (2认同)