Java 在JFrame中显示透明GIF,而不在播放时保留每一帧?(初学者)

Java 在JFrame中显示透明GIF,而不在播放时保留每一帧?(初学者),java,swing,jframe,awt,gif,Java,Swing,Jframe,Awt,Gif,我试图在JFrame中显示背景透明的GIF。我的初始代码很简单 import java.awt.*; import javax.swing.*; public class GUIProject { public static void main(String [] args) { JFrame pokemonFrame = new JFrame(); pokemonFrame.setSize(800, 800); ImageIco

我试图在JFrame中显示背景透明的GIF。我的初始代码很简单

import java.awt.*;
import javax.swing.*;
public class GUIProject 
{
    public static void main(String [] args)
    {
        JFrame pokemonFrame = new JFrame();
        pokemonFrame.setSize(800, 800);
        ImageIcon imageLabel = new ImageIcon("/Users/Hannah/eclipse-workspace/Graphics/pokemon images/pikasprite.gif");
        JLabel label = new JLabel(imageLabel);
        pokemonFrame.setLayout(new FlowLayout());
        pokemonFrame.add(label);
        pokemonFrame.setVisible(true);  
    }
}
不幸的是,我遇到了一个问题,这个问题与所涉及的问题完全相同。基本上,gif的过去帧在gif循环时仍保留在屏幕上,从而产生一种重影效果。我使用的图像与我链接的帖子使用的图像完全相同。我曾尝试实施选定答案给出的解决方案,但它对我无效,可能是因为它太高级了,我无法理解

我只是一个初学者,但我真的很想为我的班级正在进行的一个项目解决这个问题


我想要一些帮助来实现这段代码,或者找到另一个解决我遇到的问题的方法。(如果这个问题不恰当,我很抱歉!我自己从来没有使用过堆栈溢出,但我以前一直在使用它。)

以下是我使用的代码:

import java.awt.*;
import javax.swing.*;

public class SSCCE extends JPanel
{
    public SSCCE()
    {
        JLabel label = new JLabel( new ImageIcon("bart_simpson.gif") );
        add( label );

        setBackground( Color.YELLOW );
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new SSCCE());
        frame.pack();
//      frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args) throws Exception
    {
        java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
/*
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
*/
    }
}
这是我使用的图像:


我认为这是一个透明的图像,因为您可以更改面板的背景,背景通过图像显示。

以下是我使用的代码:

import java.awt.*;
import javax.swing.*;

public class SSCCE extends JPanel
{
    public SSCCE()
    {
        JLabel label = new JLabel( new ImageIcon("bart_simpson.gif") );
        add( label );

        setBackground( Color.YELLOW );
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new SSCCE());
        frame.pack();
//      frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args) throws Exception
    {
        java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
/*
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
*/
    }
}
这是我使用的图像:


我相信这是一个透明的图像,因为你可以改变面板的背景,背景通过图像显示出来。

我遇到了一个问题,这个问题与这篇文章所涉及的问题完全相同
-告诉我们问题是什么。从你的观点来看,我们不需要再阅读另一个问题来找出问题所在。在任何情况下,在JLabel上将透明gif显示为图像图标对我来说都很好。也就是说,在每个图像改变之前,背景都会被清除(我想这就是你的问题所在吧?)。我在Windows7上使用JDK8。在论坛上发布你的真实图片和问题的图片,就像链接到问题中所做的那样,这样我们可以看到确切的问题。非常感谢你的输入!我会编辑我的帖子。是的,这就是问题所在。我使用的图片与我链接的论坛帖子完全相同。我不确定如何显示JFrame错误显示的图像。哦,我在Mojave操作系统上使用的是最新版本的JDK(我想是8?),我使用的是与论坛帖子完全相同的图片——gif不适合我。所以我认为问题在于gif,而不是代码。尝试另一个动画gif。这很有趣。我总共使用了三种不同的GIF。两个是相同的3D模型皮卡丘(一个正在做一个空闲的动画,在他的攻击),一个是2D皮卡丘精灵。精灵gif是以一种完全不同的方式被扭曲的,尽管-每一帧都以某种方式被破坏,以至于白色像素覆盖了每一帧精灵的不同部分。这非常令人困惑,我不知道如何解决它。
我遇到了一个问题,这个问题与这篇文章所涉及的问题完全相同
-告诉我们问题是什么。从你的观点来看,我们不需要再阅读另一个问题来找出问题所在。在任何情况下,在JLabel上将透明gif显示为图像图标对我来说都很好。也就是说,在每个图像改变之前,背景都会被清除(我想这就是你的问题所在吧?)。我在Windows7上使用JDK8。在论坛上发布你的真实图片和问题的图片,就像链接到问题中所做的那样,这样我们可以看到确切的问题。非常感谢你的输入!我会编辑我的帖子。是的,这就是问题所在。我使用的图片与我链接的论坛帖子完全相同。我不确定如何显示JFrame错误显示的图像。哦,我在Mojave操作系统上使用的是最新版本的JDK(我想是8?),我使用的是与论坛帖子完全相同的图片——gif不适合我。所以我认为问题在于gif,而不是代码。尝试另一个动画gif。这很有趣。我总共使用了三种不同的GIF。两个是相同的3D模型皮卡丘(一个正在做一个空闲的动画,在他的攻击),一个是2D皮卡丘精灵。精灵gif是以一种完全不同的方式被扭曲的,尽管-每一帧都以某种方式被破坏,以至于白色像素覆盖了每一帧精灵的不同部分。这很让人困惑,我不知道如何解决它。