定期更改JLabel图标

时间:2013-05-22 12:56:37

标签: java swing icons jlabel event-dispatch-thread

我必须每2秒更改一次jLabel的图标。我使用Timer和Timer任务来执行此操作,但它只显示第一个图像。这是代码:

    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);

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

  • 您遇到Concurency in Swing

  • 的问题
  • Swing is Single Threaded所有活动必须在EDT上完成

  • 来自util.Timer的输出永远不会被通知Event Dispatch Thread,而对已经可见的Swing GUI

  • 没有任何更改
  • 使用Swing Timer,然后输出将始终在EDT上完成

答案 1 :(得分:-1)

你应该使用一个线程。至少,这就是我要用的。