[英]Java: ImageIcon - image file updating but image icon in Java frame not
我在JFrame
(Java GUI)的Jlabel
中有一个ImageIcon
。
ImageIcon
应该基于按下计算按钮(即calcButton.addActionListener(new ActionListener()
)和方法中的部分代码来更新:
icon2 = new ImageIcon("M:\\Repos\\rtrans\\radTransPlot.png");
Plot1.setIcon(icon2);
frame.add(Plot1,gc);
frame.setVisible(true);
初始ImageIcon
(icon1)为空:
public class RadTransGui
{
private ImageIcon icon1 = new ImageIcon("M:\\Repos\\rtrans\\radTransPlotEmpty.png");
private ImageIcon icon2;
private JLabel Plot1 = new JLabel(icon1);
并根据第一次按下计算按钮而不是在随后按下计算按钮后正确更新。 每次按下计算时, M:\\Repos\\rtrans\\radTransPlot.png 的内容都会正确更新。
我尝试将 ImageIcon 设置为 null 并在每次按下计算按钮时向框架添加和删除 JLabel。
有任何想法吗? 谢谢。
ImageIcon() 的构造函数在内部使用Toolkit.getDefaultToolkit().getImage
。
您必须手动使用Toolkit.getDefaultToolkit().createImage
而不是Toolkit.getDefaultToolkit().getImage
。 后者使用缓存,而前者不使用并且总是返回一个新实例。
new ImageIcon(Toolkit.getDefaultToolkit().createImage("..filename.."))
来自createImage
的 javadoc :
返回的 Image 是一个新对象,不会与此方法或其 getImage 变体的任何其他调用者共享。
与getImage
的 javadoc 比较:
底层工具包尝试将具有相同文件名的多个请求解析为相同的返回 Image 。 [...] 如果指定文件中包含的图像数据发生更改,则从该方法返回的Image 对象可能仍包含在先前调用后从文件加载的陈旧信息。
似乎没有规定 ImageIcon 应该使用缓存图像的 javadoc 或规范,所以这是一个完美的例子,如果你不知道 100% 你在做什么,编程是多么脆弱。 即使它在一种环境中有效,也不能保证它总是有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.