Java - 如何将事件发布到UI线程或调用UI线程的函数?

时间:2012-04-02 12:37:57

标签: java multithreading swt

我有一个如下所示的java代码:

//UI thread
//Some code
Job j = new Job(jobName) {

@Override
public IStatus run(IProgressMonitor monitor) {
try {
                    //Some code
                    SomeFunc();
                    //Some code
                    return Status.OK_STATUS;

    } catch(Exception e) {
    }
    finally {
    }
}
};
j.schedule();

问题是必须从UI线程调用SomeFunc();

我是java的新手,所以能帮助我展示将事件发布到UI线程或调用UI线程函数的最佳方法吗?

3 个答案:

答案 0 :(得分:4)

EventQueue.invokeLater(new Runnable() { 
  @Override
  public void run() {
     // your UI code
  }
});

或者您可以使用SwingWorker,它的另一个选择: http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

答案 1 :(得分:2)

在SWT中,使用Display {{1}}或Display.asyncExec()中的Display.syncExec()。

答案 2 :(得分:0)

值得一看Lars Vogel的Eclipse Jobs and Background Processing教程。关于如何在Eclipse Jobs的UI线程上运行代码,有很好的examples