Scout Eclipse 用户计时器
Scout Eclipse user Timer
我想在 Scout 类 中使用 Timer 来更改 UI 个 scout 个元素。
例如:我有一些标签,我想在一段时间后更改值:
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 线程上 return 遇到了麻烦,因为它既不是 SWT 线程也不是 SWING 线程。 (Scout UI 是两者的包装器)
如何在 Scout 中 运行 计时器,或如何在 Scout 中获取 UI 线程?
马尔科
您想要的是在 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
。)
我想在 Scout 类 中使用 Timer 来更改 UI 个 scout 个元素。
例如:我有一些标签,我想在一段时间后更改值:
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 线程上 return 遇到了麻烦,因为它既不是 SWT 线程也不是 SWING 线程。 (Scout UI 是两者的包装器)
如何在 Scout 中 运行 计时器,或如何在 Scout 中获取 UI 线程?
马尔科
您想要的是在 ClientSyncJob
:
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
。)