有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java SWT/Swing>Threads n'Hell

我有一份SWT申请。我在SWT感到很沮丧,因为它没有使我想做的事情变得容易。所以我用秋千。秋千使我的生活轻松。耶。除了现在,这两个人必须谈谈。问题是,它们运行在不同的线程上,每当我尝试从Swing运行SWT GUI方法时,我都会得到:

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吗?该线程何时存在


共 (1) 个答案

  1. # 1 楼答案

    我在SWT方面做得不多,但SWT似乎会严格禁止在非UI线程中访问SWT对象。您可以排队请求与SWT上的对象对话

    Thislink更好地解释了这一点

    该示例建议您使用syncExec

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

    我可以假设这将在主SWT UI线程上排队运行,因此访问将是合法的

    注意:我再次阅读了链接,syncExec最终将冻结您的Swing EDT。如果调用syncExec,它将在SWT队列上抛出Runnable并等待它完成。您可以查看asyncEvent,将runnable抛出队列并继续工作