繁体   English   中英

在JLabel中刷新相同的图像

[英]Refresh Same Image in a JLabel

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

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

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

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

我已经通过使用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);

但是如果我不调用img#getImage()#flush();不知道setIcon()有什么问题img#getImage()#flush(); 有人知道吗?

你也可以注意到

  1. ImageIO有点慢
  2. img.getImage().flush(); 调用它会闪烁图像
  3. 但是如果每次我都有不同的文件名,则无需调用img.getImage().flush(); 只继续jlabel.setIcon(img); 并且图像没有闪烁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM