没有提神,每次都是相同的形象

时间:2011-11-24 03:58:13

标签: java swing

基本上,我正在尝试创建一个显示图像的应用程序。

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) {
        }
    });
}

3 个答案:

答案 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()”。