Таймер пользователя Scout Eclipse

Я хотел бы использовать Timer внутри классов Scout для изменения пользовательского интерфейса элементов 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

ведь я понимаю, потому что вы не должны менять пользовательский интерфейс вне своего потока. Но теперь у меня возникли проблемы с возвратом в поток пользовательского интерфейса, потому что это не поток SWT и не поток SWING. (Scout UI является оболочкой для обоих)

Как я могу запустить таймер в Scout или как получить поток пользовательского интерфейса в Scout?

Марко


person Marko Zadravec    schedule 18.08.2015    source источник


Ответы (1)


Что вы хотите, так это выполнить изменение пользовательского интерфейса в 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.

(Аналогом, когда вы хотите начать асинхронную работу из потока пользовательского интерфейса, будет ClientAsyncJob.)

person Patrick    schedule 21.08.2015