我第一次使用线程时遇到了问题,在主线程的SWT程序中我创建了GUI并打开了shell,然后启动了一个新的线程来运行模型中的一些逻辑,并且某个状态下的模型在GUI类中调用了一个方法......这就是问题所在 在第二个线程中调用此方法,而我希望在主线程中调用它,或者至少在主线程中执行它
我该如何解决这个问题? 谢谢,
答案 0 :(得分:3)
外部线程无法访问GUI。检查display.asyncExec
。
答案 1 :(得分:3)
您需要使用asyncExec
类中的syncExec
或Display
方法才能在主线程中执行runnable:
// do stuff in a background thread
// ...then schedule job to run in main thread
display.asyncExec(new Runnable() {
...
});
syncExec
和asyncExec
都会尽快在主(UI)线程中安排作业。区别在于asyncExec
会立即返回,而syncExec
在作业完成之前不会返回。