Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Gif在替换为JLabel';s设置图标法_Java_Image_Swing_Jlabel_Animated Gif - Fatal编程技术网

Java Gif在替换为JLabel';s设置图标法

Java Gif在替换为JLabel';s设置图标法,java,image,swing,jlabel,animated-gif,Java,Image,Swing,Jlabel,Animated Gif,一般来说,我对Java和编程还是非常陌生的。我正在尝试使用Swing和以下代码显示GIF: JPanel contentPane; JLabel imageLabel = new JLabel(); public FrostyCanvas(String imageName) { try { setDefaultCloseOperation(EXIT_ON_CLOSE); contentPane = (JPa

一般来说,我对Java和编程还是非常陌生的。我正在尝试使用Swing和以下代码显示GIF:

    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();
        }
    }
FC.changeGif("D:\\new.gif")
方法调用如下:(在另一个类中)

FrostyCanvas FC=新的FrostyCanvas(“old.gif”)

此时GIF已设置动画。然后,我尝试使用以下方法将GIF替换为另一个GIF:(与ForstyCanvas(String imageName)在同一个类中)

我使用以下代码在不同的类中调用上述方法:

    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();
        }
    }
FC.changeGif("D:\\new.gif")

图像已成功替换。但是,现在它只显示new.gif的第一帧,不再设置动画。如何移动新的GIF?

ImageIO读取图像的方式是创建静态图像。要做的事情是使用ImageIcon的加载程序

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

这样,您就可以使用与资源/url相同的方法构造图像图标。

很难说,您确定这两种gif没有区别吗?也许尝试切换到相同的gif以确保问题不在文件上?我尝试切换到相同的gif,它在第一帧时也冻结了。我试过其他的GIF,同样的问题。所以文件不应该是问题所在。我认为您需要使用另一个ImageIcon构造函数<代码>新图像图标(文件.toURI().toul())解决了问题!现在GIF已设置动画。非常感谢你!