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.
要延迟执行某些操作,请使用 Display
的 timerExec
方法在延迟后安排 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);
}
}
});
我的问题是更改可运行文件中的背景颜色。我正在尝试像交通灯那样更改标签的背景颜色(红色 -> 黄色 -> 绿色),但我对 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.
要延迟执行某些操作,请使用 Display
的 timerExec
方法在延迟后安排 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);
}
}
});