Java: ImageIcon - image file updating but image icon in Java frame not

十年热恋 提交于 2021-02-05 09:24:12

问题


I have got a ImageIcon in a Jlabel in a JFrame (Java GUI).

The ImageIcon should get updated based on pressing a Calculate button (i.e. calcButton.addActionListener(new ActionListener() ) with part of the code in the method:

icon2 = new ImageIcon("M:\\Repos\\rtrans\\radTransPlot.png");
Plot1.setIcon(icon2);
frame.add(Plot1,gc);
frame.setVisible(true);

The initial ImageIcon (icon1) is blank:

public class RadTransGui 
{
private ImageIcon icon1 = new ImageIcon("M:\\Repos\\rtrans\\radTransPlotEmpty.png");
private ImageIcon icon2;
private JLabel Plot1 = new JLabel(icon1);

and gets properly updated based on the first Calculate button press but not after subsequent presses of Calculate button. The contents of M:\Repos\rtrans\radTransPlot.png gets updated correctly each time Calculate is pressed.

I have tried setting the ImageIcon to null and adding and removing the JLabel to the frame each time the Calculate button is pressed.

Any ideas? Thanks.


回答1:


The constructor of ImageIcon() internally uses Toolkit.getDefaultToolkit().getImage.

You have to manually use Toolkit.getDefaultToolkit().createImage instead of Toolkit.getDefaultToolkit().getImage. The latter uses cache whereas the former doesn't and always returns a new instance.

new ImageIcon(Toolkit.getDefaultToolkit().createImage("..filename.."))

From the javadoc of createImage:

The returned Image is a new object which will not be shared with any other caller of this method or its getImage variant.

Compare with the javadoc of getImage:

The underlying toolkit attempts to resolve multiple requests with the same filename to the same returned Image. [...] If the image data contained in the specified file changes, the Image object returned from this method may still contain stale information which was loaded from the file after a prior call.

There seems to be no javadoc or spec that prescribes that ImageIcon should use cached images, so it's a perfect example of how fragile programming is if you don't know 100% what you're doing. Even if it works in one environment doesn't guarantee it always works.



来源:https://stackoverflow.com/questions/60952313/java-imageicon-image-file-updating-but-image-icon-in-java-frame-not

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!