Java SWT/Swing->;螺纹n';赫尔
我有一份SWT申请。我在SWT感到很沮丧,因为它没有使我想做的事情变得容易。所以我用秋千。秋千使我的生活轻松。耶。除了现在,这两个人必须谈谈。问题是,它们运行在不同的线程上,每当我尝试从Swing运行SWT GUI方法时,我都会得到:Java SWT/Swing->;螺纹n';赫尔,java,multithreading,swing,swt,Java,Multithreading,Swing,Swt,我有一份SWT申请。我在SWT感到很沮丧,因为它没有使我想做的事情变得容易。所以我用秋千。秋千使我的生活轻松。耶。除了现在,这两个人必须谈谈。问题是,它们运行在不同的线程上,每当我尝试从Swing运行SWT GUI方法时,我都会得到: Exception in thread "AWT-EventQueue-0" org.eclipse.swt.SWTException: Invalid thread access 哦,快乐。那么,我该如何解决这个问题呢?如果这是Objective-C,我可以使
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
但不是,所以我不能。没有办法在线程B上运行方法A吗?当该线程存在时?我对SWT没有太多的研究,但SWT似乎会严格禁止访问非UI线程中的SWT对象。您可以排队请求与SWT上的对象对话 林克对此解释得更好 该示例建议您使用syncExec
display.syncExec(
new Runnable() {
public void run(){
label.setText(text);
}
});
我可以假设这将在主SWT UI线程上排队运行,因此访问是合法的
注意:我再次阅读了链接,syncExec最终将冻结您的Swing EDT。如果调用syncExec,它将在SWT队列上抛出Runnable并等待它完成。您可以查看asyncEvent,将runnable抛出队列并继续工作。谢谢!这完全成功了!我也注意到了同步与异步的区别;不确定哪一个对我的目的更有效,可能两者都是:D。