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

SWT: Changing the background color of a label two times

我的问题是更改可运行文件中的背景颜色。我正在尝试像交通灯那样更改标签的背景颜色(红色 -> 黄色 -> 绿色),但我对 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 秒)期间没有任何变化,并且显示最后一种颜色(在本例中为绿色)- 没有红色也没有黄色。你能告诉我我的错误是什么吗?或者有解决这个问题的想法?

Display.asyncExec 运行 用户界面线程中的整个 Runnable。所以你的两个 Thread.sleep 在 UI 线程中调用 运行 并停止线程更新 UI.

要延迟执行某些操作,请使用 DisplaytimerExec 方法在延迟后安排 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);
      }
    }
});