SWT / Swing -> Threads n 'Hell - PullRequest
       3

SWT / Swing -> Threads n 'Hell

2 голосов
/ 22 октября 2011

У меня есть приложение SWT.Я был разочарован в SWT за то, что он не позволил мне сделать то, что я хотел сделать.Поэтому я использовал Swing.Качели сделали мою жизнь проще.Ура.За исключением теперь, два должны говорить.Проблема в том, что они работают в разных потоках, и всякий раз, когда я пытаюсь запустить метод SWT GUI из Swing, я получаю:

Exception in thread "AWT-EventQueue-0" org.eclipse.swt.SWTException: Invalid thread access

О радостьИтак, как мне это исправить?Если бы это был Objective-C, я мог бы использовать:

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait

Но это не так, поэтому я не могу.Нет ли способа запустить метод A в потоке B?Когда этот поток существует?

1 Ответ

4 голосов
/ 22 октября 2011

Я мало работал с SWT, но кажется, что SWT строго запретит доступ к объекту SWT в потоке без пользовательского интерфейса.Вы можете поставить в очередь запрос на общение с объектом на SWT.

Эта ссылка объясняет это лучше

В примере предлагается использовать syncExec

display.syncExec(
  new Runnable() {
    public void run(){
      label.setText(text);
    }
  });

Это, я могу предположить, поставит в очередь Runnable наосновной поток пользовательского интерфейса SWT и, следовательно, доступ будет законным.

Примечание: я снова перечитал ссылку, в итоге syncExec заморозит ваш Swing EDT.Если вы вызываете syncExec, он выбросит Runnable в очередь SWT и будет ждать его завершения.Вы можете посмотреть на asyncEvent, чтобы бросить runnable в очередь и продолжить работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...