Gif больше не анимируется после замены на метод setIcon JLabel - PullRequest
1 голос
/ 29 марта 2020

Я все еще очень плохо знаком с Java и программированием в целом. Я пытаюсь отобразить GIF, используя Swing и следующий код:

    JPanel contentPane;
    JLabel imageLabel = new JLabel();

    public FrostyCanvas(String imageName) {
        try {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            contentPane = (JPanel) getContentPane();
            contentPane.setLayout(new BorderLayout());
            setSize(new Dimension(1600, 900));
            setTitle("FrostySpirit v1.1.1 (Beta) - FrostyCanvas");
            // add the image label
            ImageIcon ii = new ImageIcon(this.getClass().getResource(imageName));
            imageLabel.setIcon(ii);
            contentPane.add(imageLabel, java.awt.BorderLayout.CENTER);
            // display target GIF
            this.setLocationRelativeTo(null);
            this.setVisible(true);
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

Вызов метода следующий: (в другом классе)

FrostyCanvas FC = new FrostyCanvas("old.gif");

GIF анимируется в этот момент. Затем я пытаюсь заменить GIF другим, используя следующий метод: (в том же классе, что и ForstyCanvas (String imageName))

public void changeGif(String imageName) throws IOException
    {
        Icon icon; File file;
        file = new File(imageName);
        icon = new ImageIcon(ImageIO.read(file));
        imageLabel.setIcon(icon);
    }

Я вызываю метод выше в другом классе, используя следующий код:

FC.changeGif("D:\\new.gif")

Изображение успешно заменено. Однако теперь он показывает только самый первый кадр new.gif и больше не анимирован. Как я могу сделать новый GIF двигаться?

1 Ответ

1 голос
/ 29 марта 2020

То, как ImageIO считывает изображение, создает статическое c изображение. Нужно использовать загрузчик ImageIcon.

ImageIcon replacement = new ImageIcon(file.toURI().toURL());

Таким образом, вы используете тот же метод для создания значка изображения, что и для ресурса / URL.

...