加载GIF动画中的JLabel的怪事(Loading animated GIF in JLabel

2019-06-24 12:49发布

我试图加载在JLabel GIF动画。

虽然这工作:

URL urlsd;
try {
    urlsd = new URL("http://pscode.org/media/starzoom-thumb.gif");
    ImageIcon imageIcon = new ImageIcon(urlsd); 
    JLabel progress = new JLabel(imageIcon);    
    progress.setBounds(5, 20, 66, 66);
    contentPane.add(progress);
} catch (MalformedURLException e) {
    e.printStackTrace();
}

这一点,在另一方面,不,我不希望从URL得到GIF,因为我已经有GIF。 装载的结果。这说明只有GIF的第一帧:

try {   
    ImageIcon imageIcon = new ImageIcon(ImageIO.read(ClassLoader.getSystemResourceAsStream("res/images/progress_indicator.gif")));

    JLabel progress = new JLabel(imageIcon);
    imageIcon.setImageObserver(progress);
    progress.setBounds(5, 20, 66, 66);
    contentPane.add(progress);
} catch (MalformedURLException e) {

    e.printStackTrace();
}

我想一定是一个原因,但我不能找到它。

谢谢! 亚历克斯

Answer 1:

你可以尝试加载你的GIF文件这样的:

public class Test extends JPanel {
    public Test() {
        ImageIcon imageIcon =
          new ImageIcon(Test.this.getClass().getResource("starzoom-thumb.gif"));
    }
}

或使用Test.class.getResouce()如果你的背景是静态的。



Answer 2:

下面的代码工作对我来说,它会显示动画,而不是图像的第一帧。

public class Test extends JPanel {
    public Test() {
        ImageIcon yyyyIcon = new ImageIcon(xxx.class.getClassLoader().getResource("yyyy.gif"));
        connectionLabel.setIcon(yyyy);   
    }
}


Answer 3:

所以也有这样做的一个简单的方法。 下面这行是我做到了。

this.setContentPane(new JLabel(new ImageIcon("Path To Gif File")));


文章来源: Loading animated GIF in JLabel weirdness