我想在童子军类中使用计时器来改变童子军元素的UI。
例如:我有一些标签,希望在一段时间后更改值:
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
myLabel.setValue("some value")
}
}, 1000 * 4);这给我带来了错误:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: queueing rwt runnable from outside scout thread我理解她,因为你不应该在它的线程之外改变UI。但是现在我很难返回UI线程,因为它不是SWT线程,也不是SWING线程。(Scout是两者的包装器)
如何在Scout中运行Timer,或者如何在Scout中获得UI线程?
马尔科
发布于 2015-08-21 05:06:30
您想要的是在ClientSyncJob中执行UI的更改
new ClientSyncJob("Perform UI Change", ClientSyncJob.getCurrentSession()) {
@Override
protected void runVoid(IProgressMonitor monitor) throws Throwable {
// Your changes for the UI go here
}
}.schedule();与往常一样,在处理UI线程时,要小心避免对SyncJob进行不必要的工作。
(当您希望从UI线程启动异步工作时,对应方将是一个ClientAsyncJob。)
https://stackoverflow.com/questions/32064865
复制相似问题