Аналогично 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