我正在观看日食。在视图中我添加了一个表。现在我使用asyncExec 从视图的run方法调用一个线程。
我的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的构造函数中我启动了该线程。 但是我得到了无效的Thread异常。
如何解决问题。
答案 0 :(得分:1)
与AWT和EventDispatchThread类似,SWT必须处理UI线程中的所有内容。
您的SampleViewAction
已在UI线程上运行,以响应菜单或工具项选择。
看起来您的问题来自于使用asyncExec(*)
,它将发布可在UI线程上运行的runnable(延迟它),并从中启动 new 线程asyncExec
可运行。你也可以简单地开始你的线程,并摆脱asyncExec
。
您的UDPReadThread
不是 UI线程。如果您需要更新UDPReadThread
的UI小部件,那就是需要asyncExec
的代码:
display.asyncExec(
new Runnable() {
public void run(){
label.setText(text);
}
});
除此之外,你不应该继承Thread
,除非你真的在扩展线程功能。当你想要启动另一个线程时的正常模式:
UDPReadRunnable udpRunnable = ....;
Thread thread = new Thread(udpRunnable);
thread.start();
获取有关显示主题的更多信息