如何从Java中的另一个线程更新SWT GUI

我正在使用SWT编写桌面应用程序。 从另一个线程更新GUI控件的最简单方法是什么?

根据您的需要使用Display.asyncExec或Display.syncExec 。

例如,另一个线程可能会调用此方法来安全地更新标签:

private static void doUpdate(final Display display, final Label target, final String value) { display.asyncExec(new Runnable() { @Override public void run() { if (!target.isDisposed()) { target.setText(value); target.getParent().layout(); } } }); } 
  • 更多这里

这里有一个教程。

“当涉及到线程问题时,SWT确实指出了快速失败的原因;所以至少在生产之前不会忽视典型的问题。但问题是,如果你需要更新标签/按钮,你会怎么做SWT中的/ super-duper-control来自后台线程?嗯,它与Swing惊人相似:“

 // Code in background thread. doSomeExpensiveProcessing(); Display.getDefault().asyncExec(new Runnable() { public void run() { someSwtLabel.setText("Complete!"); } }); 

您实际上只是向GUI线程发送了一条消息,表明某些修改已被更改。 如果你从MVC的角度看它,它会更干净。

当从主线程创建单独的线程时,将Gui对象传递给新线程,并且您可以访问该GUI对象的所有属性。