Java 定期更改JLabel图标

Java 定期更改JLabel图标,java,swing,icons,jlabel,event-dispatch-thread,Java,Swing,Icons,Jlabel,Event Dispatch Thread,我必须每2秒更改一次jLabel的图标。我使用一个计时器和一个计时器任务来完成这个任务,但它只显示第一个图像。代码如下: ImageIcon[] icons = {new ImageIcon(this.getClass().getResource("orange.jpg")), new ImageIcon(this.getClass().getResource("cosmote.jpg")), new ImageIcon(this.getClass().get

我必须每2秒更改一次jLabel的图标。我使用一个计时器和一个计时器任务来完成这个任务,但它只显示第一个图像。代码如下:

    ImageIcon[] icons = {new ImageIcon(this.getClass().getResource("orange.jpg")), new     
    ImageIcon(this.getClass().getResource("cosmote.jpg")), new 
    ImageIcon(this.getClass().getResource("vodafone.jpg"))};
    java.util.Timer timer = new java.util.Timer();
    int indexIcon;
然后在JFrame构造函数中:

    initComponents();
    open(fisierAgenda);
    TimerTask task = new TimerTask() {
        public void run() {
            indexIcon=(indexIcon++)%3;
            jLabel.setIcon(icons[indexIcon]);
            jLabel.setText(""+indexIcon);
        }
    };
    timer.schedule(task, 0, 2000);

任何帮助都将不胜感激。

您应该为此使用一个线程。至少,我会这么做。

  • 你对我有意见吗

  • 所有活动都必须在EDT上进行

  • 来自
    util.Timer
    的输出将永远不会被通知
    事件调度线程
    ,对已经可见的
    Swing GUI

  • 使用,则输出将始终在EDT上完成


为重复任务执行Swing
计时器。有关更多详细信息,请参阅。还可以看到这一点。不是向下投票者,而是对Swing GUI的所有编辑和更新都应该在EDT上。也不是向下投票者,而是:1)所有更新都应该在EDT上完成(因此最简单的事情是使用Swing计时器)2)自Java 1.5以来,最好使用
执行器
框架,而不是手动创建
线程
。3) 如果需要,您可以将
执行器
SwingUtilities.invokeLater()组合起来