Проблема в вызове потока внутри метода запуска представления Eclipse после использования asyncExec.Неверное исключение темы - PullRequest
0 голосов
/ 08 июня 2011

У меня вид на затмение.В представлении я добавил таблицу.Теперь я вызываю поток из метода run представления , используя asyncExec .

Мой класс View выглядит как -

public class SampleViewAction implements IWorkbenchWindowActionDelegate{

      Thread t;   

      int Count;


      @Override

      public void run(IAction arg0) {

 }
}

Теперь я добавил поток как этот -

  PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {                   

                        @Override

                        public void run() {

                              new UDPReadThread();



                        }

                  });

Где UDPReadThread - класс, расширяющий поток, где в конструкторе UDPReadThread я запустил поток.Но я получаю недопустимое исключение потока.

Как решить проблему.

1 Ответ

1 голос
/ 08 июня 2011

Аналогично AWT и EventDispatchThread, SWT должен обрабатывать все в потоке пользовательского интерфейса.

Ваш SampleViewAction уже запущен в потоке пользовательского интерфейса в ответ на выбор пункта меню или инструмента.

Похоже, ваша проблема возникла из-за использования asyncExec(*), который разместит исполняемый файл для запуска в потоке пользовательского интерфейса (который задерживает его), и запускает новый поток из этого asyncExec Runnable. Вы также можете просто начать свою тему и избавиться от этого asyncExec.

Ваш UDPReadThread является , а не потоком пользовательского интерфейса. Если вам нужно обновить виджеты пользовательского интерфейса с UDPReadThread, это код, который требует asyncExec:

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

Кроме того, вы не должны подкласс Thread, если вы действительно расширяете возможности потоков. Обычный шаблон, когда вы просто хотите запустить другой поток:

UDPReadRunnable udpRunnable = ....;
Thread thread = new Thread(udpRunnable);
thread.start();

Вы можете получить больше информации об отображении темы от http://www.eclipse.org/swt/faq.php#uithread

...