Как обновить SWT GUI из другого потока в Java



Я пишу настольное приложение, используя SWT. Каков самый простой способ обновить элементы управления GUI из другого потока?

546   4  

4 ответов:

Используйте Дисплей.Asyncexec или дисплей.syncExec , в зависимости от ваших потребностей.

Например, другой поток может вызвать этот метод для безопасного обновления метки:

  private static void doUpdate(final Display display, final Label target,
      final String value) {
    display.asyncExec(new Runnable() {
      @Override
      public void run() {
        if (!target.isDisposed()) {
          target.setText(value);
          target.getParent().layout();
        }
      }
    });
  }

Здесь есть учебник .

"SWT делает акцент на быстром отказе, когда речь заходит о проблемах с потоками; поэтому, по крайней мере, типичные проблемы не остаются незамеченными до производства. Вопрос, однако, в том, что вы делаете, если вам нужно обновить метку/кнопку/супер-пупер-контроль в SWT из фонового потока? Ну, это удивительно похоже на качели:"

// Code in background thread.
doSomeExpensiveProcessing();
Display.getDefault().asyncExec(new Runnable() {
 public void run() {
  someSwtLabel.setText("Complete!");
 }
});

На самом деле вы можете просто отправить сообщение потоку GUI о том, что некоторые изменения были изменены. Это чище, если вы видите его с точки зрения MVC.

При создании отдельного потока из основного потока передайте объект Gui новому потоку, и u сможет получить доступ ко всем свойствам этого объекта GUI.

Comments

    Ничего не найдено.