我的问题是在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秒)内没有任何变化,并且显示最后一种颜色(在这种情况下为绿色) - 没有红色也没有黄色。你能否告诉我一下我的错误是什么?或者想法如何解决这个问题?
答案 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);
}
}
});