Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SWT/Swing->;螺纹n';赫尔_Java_Multithreading_Swing_Swt - Fatal编程技术网

Java SWT/Swing->;螺纹n';赫尔

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,我可以使

我有一份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吗?当该线程存在时?

我对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。