【问题标题】:Loading animated GIF in JLabel weirdness在 JLabel 怪异中加载动画 GIF
【发布时间】:2012-05-24 05:42:33
【问题描述】:

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

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

谢谢! 亚历克斯

【问题讨论】:

  • ClassLoader真的不是访问方式,Application Resources,试试这个链接,希望对你有帮助,HOW TO LOAD IMAGES INTO YOUR PROJECT
  • 为什么不用 ClassLoader,正如 Java Doc 中所述,它指出“所有类加载器都会首先搜索资源作为系统资源,其方式类似于搜索类文件”跨度>
  • @AlejandroVK :有关工作示例,请参阅thread

标签: java swing jlabel animated-gif


【解决方案1】:

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

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

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

【讨论】:

  • 啊哈,我会用这个答案,getClass().getResource(...) 是要走的路:-)
  • 我怀疑这就是答案。 getResourceAsStream 返回的流会发生奇怪的事情(例如声音应用程序。可能会因为流“不可重新定位”而失败)。但是提供一个URL 就可以了。
  • 谢谢,它奏效了,尽管我必须检查这个stackoverflow.com/questions/8960381/… 才能意识到我必须先包含一个斜线......使用 getSystemResourceAsStream 方法不需要的东西:D
  • 请注意,如果您的 GIF 位于 myProject/src/main/resources/icons/myGif.gif,则应将 "icons/myGif.gif 传递给 getResource。这与 getResourceAsStream 的用法形成鲜明对比,您必须在文件路径前添加一个斜杠:"/icons/myGif.gif。
【解决方案2】:

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

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

【讨论】:

  • 请添加一些解释。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2012-09-15
    • 2013-08-04
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    相关资源
    最近更新 更多