Java 向swing标签添加动画GIF

Java 向swing标签添加动画GIF,java,swing,animation,jframe,jlabel,Java,Swing,Animation,Jframe,Jlabel,我试着键入reel.setImageObserver(标签)但Eclipse将该语句标记为错误。为什么? 我还可以做什么来显示动画? 更新:新代码: public void run(){ Icon reel = common.ResourcesToAccess.reel; JLabel label = new JLabel(reel); JFrame frame = new JFrame(); frame.setUndecorat

我试着键入
reel.setImageObserver(标签)但Eclipse将该语句标记为错误。为什么?
我还可以做什么来显示动画?


更新:新代码:

public void run(){
        Icon reel = common.ResourcesToAccess.reel;
        JLabel label = new JLabel(reel);
        JFrame frame = new JFrame();
        frame.setUndecorated(true);
        frame.getContentPane().add(label);
        frame.setSize(reel.getIconWidth(),reel.getIconHeight());
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        try{
            sleep(2*1000);
        }catch(InterruptedException e){

        }
        frame.dispose();
    }  
虽然我可以在这里设置ImageObserver,但GIF仍然无法设置动画

杂项: 我正在使用的GIF可以在这里找到:


这是右边电视正上方的那个。旋转的卷轴。

在EDT中睡眠2秒,会阻止它工作(如重新绘制GUI和显示动画gif)。删除对
Thread.sleep()
的调用


如果希望帧在2秒后自动关闭,请使用
javax.swing.Timer
计划在2秒后关闭。

我还可以做些什么来显示动画?

在这里,我做了一个简短的示例,演示如何将图像添加到
JLabel
。我使用了
JApplet
,您可以根据需要修改它

代码:

@Override
    public void run(){
        JFrame f = new JFrame();
        ImageIcon reel = (ImageIcon) common.ResourcesToAccess.reel;
        JLabel label = new JLabel(reel);
        reel.setImageObserver(label);
        f.getContentPane().add(label);
        f.setUndecorated(true);
        f.setSize(300, 300);
        f.setVisible(true);
    }  

可能是您在执行某些后台任务时试图显示动画GIF?退房
SwingWorker了解有关后台任务的更多信息,而不是在EDT(事件调度线程)上执行长时间运行的任务。

否,为了测试代码,我使用了main方法。所以没有背景task@JB检查新代码。所有的魔力都在run()中,你看到的变量都是在这里工作正常的变量,只是它的旋转速度比网页中快得多。此外,您不需要调用
reel.setImageObserver(label)
。如果您需要更多帮助(或自己找到问题所在),请编写一份演示问题的SSCCE。在此SSCCE中,假设gif文件名为animated.gif,并且位于类路径中,与SSCCE类位于同一个包中。下载一份新的gif副本来运行您的SSCCE,就像您是我们一样。我做到了,而且运行良好。因此,问题可能在代码的其他地方,或者在动画gif中,或者在构造ImageIcon的方式中。出于某种原因,如果您使用类似以下内容的
ImageIcon
对象获得
Icon=newImageIcon(ImageIO.read(getClass().getResourceAsStream(“iconaResource.gif”)您的GIF将无法获取animated@jaime然后尝试给出完整路径?
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JLabel;

public class JLabelWithIconExample extends JApplet
 {


    public void init(){

            ImageIcon icon = new ImageIcon("e:/guitar.gif");/*your path*/

        JLabel copyLabel = new JLabel(icon);
                    add(copyLabel);

                       }
 }