Загрузка анимированного GIF в странности JLabel

Я пытаюсь загрузить анимированный GIF-файл в JLabel.

Пока это работает:

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

С другой стороны, этого нет, и я не хочу получать GIF из URL, поскольку у меня уже есть 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();
}

Я думаю, для этого должна быть причина, но я не могу ее найти.

Спасибо! Alex

 nIcE cOw16 мая 2012 г., 18:12
Почему не ClassLoader, как описано в этом Ява Док, в котором говорится, что «Все загрузчики классов будут сначала искать ресурс как системный ресурс, аналогично поиску файлов классов»
 nIcE cOw16 мая 2012 г., 18:07
ClassLoader на самом деле не способ доступа,Application Resources, попробуйте эту ссылку, надеюсь, что это может помо КАК ЗАГРУЗИТЬ ИЗОБРАЖЕНИЯ В ВАШ ПРОЕКТ
 nIcE cOw16 мая 2012 г., 18:26
@ AlejandroVK: рабочий пример см. В этомнит

Ответы на вопрос(3)

он покажет анимацию вместо первого кадра изображения.

public class Test extends JPanel {
    public Test() {
        ImageIcon yyyyIcon = new ImageIcon(xxx.class.getClassLoader().getResource("yyyy.gif"));
        connectionLabel.setIcon(yyyy);   
    }
}
 jmattheis09 авг. 2016 г., 09:50
Пожалуйста, добавьте объяснение.
Решение Вопроса

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

Или используяTest.class.getResouce() если ваш контекст статичен.

 nIcE cOw16 мая 2012 г., 18:41
Ааа, я пойду с этим ответом,getClass().getResource(...) это путь: -)
 Andrew Thompson16 мая 2012 г., 22:22
Я подозреваю, что это ответ. Странные вещи случаются с потоками, возвращаемымиgetResourceAsStream (например, звуковые приложения. может произойти сбой, поскольку поток «не может быть перемещен»). Но предоставьтеURL и все работает отлично.
 AlejandroVK17 мая 2012 г., 09:36
Спасибо, это сработало, хотя мне пришлось проверить это / Stackoverflow.com вопросы / 8960381 / ... чтобы понять, что мне сначала нужно было добавить косую черту ... что-то не требуется, используя подход getSystemResourceAsStream: D
 Matthias Braun03 мая 2018 г., 12:21
Обратите внимание, что если ваш GIF наmyProject/src/main/resources/icons/myGif.gif ты должен пройти"icons/myGif.gif вgetResource. Это контрастирует с использованиемgetResourceAsStream где вы должны добавить косую черту к пути к файлу:"/icons/myGif.gif.

к я это сделал.

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

Ваш ответ на вопрос