6

我正在尝试在 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();
}

我想这一定是有原因的,但我找不到。

谢谢!亚历克斯

4

3 回答 3

12

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

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

或者,Test.class.getResouce()如果您的上下文是静态的,则使用。

于 2012-05-16T16:35:10.337 回答
0

所以还有一种更简单的方法。以下是我的做法。

this.setContentPane(new JLabel(new ImageIcon("Path To Gif File")));
于 2018-05-04T18:31:31.393 回答
0

下面的代码对我有用,它将显示动画而不是图像的第一帧。

public class Test extends JPanel {
    public Test() {
        ImageIcon yyyyIcon = new ImageIcon(xxx.class.getClassLoader().getResource("yyyy.gif"));
        connectionLabel.setIcon(yyyy);   
    }
}
于 2016-08-09T07:42:55.423 回答