基本上,我正在尝试创建一个显示图像的应用程序。
filename
变量是我想要显示的图像的路径。启动应用程序后,会显示一个图像,但是当我从硬盘驱动器中删除图像(或将其他图像更改为filename
名称)时,我没有得到任何其他图像,就像之前。
public static void main(final String[] args) {
String filename = "C:\\temp\\1.jpeg";
JFrame frame = new JFrame();
frame.getContentPane().add(new JLabel(new ImageIcon(filename)));
frame.pack();
frame.setVisible(true);
// Mouse Listener is only to display another JFrame after mouseClicked event
frame.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
main(args);
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
});
}
答案 0 :(得分:3)
图像被缓存。你需要强制它重新加载:
// This works using ImageIO
imageLabel.setIcon( new ImageIcon(ImageIO.read( new File(imageName) ) ) );
// Or you can flush the image
ImageIcon icon = new ImageIcon(imageName);
icon.getImage().flush();
imageLabel.setIcon( icon );
答案 1 :(得分:0)
如果这是所有代码,并且您正在操作系统上移动文件,则您的应用程序将不会接收更改。
图片已加载,并且总是被告知以相同的方式绘制。
您可以使用WatchService来监视文件的更改(我认为),或者只是定期检查文件是否已更改。
答案 2 :(得分:0)
你想要达到的那种行为似乎有点不同寻常。如果这是你想要做的,你可以设置一个定期触发事件的计时器(每“n”秒或任何适当的),删除图像图标对象并添加一个新的。别忘了在最后打电话给“pack()”。