SWT:两次更改标签的背景颜色

时间:2015-07-31 21:26:13

标签: swt runnable

我的问题是在runnable中更改背景颜色。我想改变标签的背景颜色,如交通信号灯(红色 - >黄色 - >绿色),我对SWT的经验不多。所以我不明白为什么我的尝试不起作用:

Display.getDefault().asyncExec(new Runnable() {
    public void run()
    {
     label.setBackground(red);
     try {
         Thread.sleep(1000);
     } catch (InterruptedException e) {
         e.printStackTrace();
       }

     label.setBackground(yellow);    
     try {
         Thread.sleep(1000);
     } catch (InterruptedException e) {
         e.printStackTrace();
       }

     label.setBackground(green);

     }
    });

在等待时间(2 * 1秒)内没有任何变化,并且显示最后一种颜色(在这种情况下为绿色) - 没有红色也没有黄色。你能否告诉我一下我的错误是什么?或者想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

Display.asyncExec运行用户界面线程中的整个Runnable。因此,您的两个Thread.sleep调用在UI线程中运行,并阻止线程更新UI。

要延迟执行某项操作,请使用timerExec Display方法安排Runnable在延迟后运行。

// Set first color. Note: use `asyncExec` if you are not in the UI thread

label.setBackground(red);

// Schedule changes

Display.getDefault().timerExec(1000, new Runnable() {
    @Override
    public void run()
    {
      if (!label.isDisposed()) {
        label.setBackground(yellow);
      }
    }
});

Display.getDefault().timerExec(2000, new Runnable() {
    @Override
    public void run()
    {
      if (!label.isDisposed()) {
        label.setBackground(green);
      }
    }
});