GIF не отображается должным образом в Java Swing - PullRequest
2 голосов
/ 05 марта 2020

Я пытаюсь сделать игру в Java, и я решил использовать GIF-файлы в качестве анимации в JFrame. Однако программа продолжает показывать последние кадры GIF, поэтому все изображение выглядит как беспорядок.

Вот как должен выглядеть GIF в программе:

Correct

Однако GIF выглядит примерно так (это скриншот того, что появляется на JFrame):

Wrong

А вот мой код. Я использую NetBeans с Java 8.0.2.

package giftest;

public class MainWindow extends javax.swing.JFrame {

public MainWindow() {
    initComponents();
}


@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jLabel1 = new javax.swing.JLabel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/giftest/Chespin2.gif"))); // NOI18N
    jLabel1.setText("jLabel1");

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(158, 158, 158)
            .addComponent(jLabel1)
            .addContainerGap(12, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(89, 89, 89)
            .addComponent(jLabel1)
            .addContainerGap(19, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>                        


public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new MainWindow().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JLabel jLabel1;
// End of variables declaration  

}
// End of Program

Эффект можно воспроизвести с помощью следующих строк кода:

import javax.swing.*;
import java.net.*;

public class AnimatedGifTest {

    AnimatedGifTest() throws MalformedURLException {
        URL url = new URL(
                "https://i.stack.imgur.com/y9O4G.gif");
        ImageIcon ii = new ImageIcon(url);
        JOptionPane.showMessageDialog(null, ii);
    }

    public static void main(String[] args) {
        Runnable r = () -> {
            try {
                new AnimatedGifTest();
            } catch (MalformedURLException ex) {
                ex.printStackTrace();
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

Я использую Java Swing и я использую jLabels и помещаю GIF в качестве значка. Есть ли способ исправить эту проблему в NetBeans на Java 8.0.2? Заранее спасибо!

...