2012-04-02 67 views
4

我有一個java代碼看起來像這樣:Java - 如何向UI線程發佈事件或調用UI線程的函數?

//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(); 

的問題是,必須SomeFunc();從UI線程調用。

我是新來的java,所以你可以幫我顯示發佈事件到UI線程或調用UI線程函數的最佳方法嗎?

+0

你必須更清楚你使用的是什麼UI框架? – shem 2012-04-02 12:41:08

+0

我正在開發一個eclipse插件,並使用Eclipse SDK。 – sara 2012-04-02 12:42:44

+1

聽起來像你需要看看SWT然後 – pjp 2012-04-02 12:47:54

回答

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

+0

您能否詳細說明在哪裏以及如何調用這段代碼? – sara 2012-04-02 12:41:44

+2

'EventQueue.invokeLater(...)'通常寫爲'SwingUtilities.invokeLater(...)' 請注意,這適用於Swing而不適用於SWT。請參閱http://stackoverflow.com/questions/7857531/swt-swing-threads-n-hell – pjp 2012-04-02 12:52:41

+0

@sara:只需將您的調用替換爲代碼@Wajdy發佈的'SomeFunc',並將調用放到'SomeFunc'中'運行'方法。 – Tudor 2012-04-02 13:14:35

2

在SWT中,this snippet或Display.asyncExec使用Display.syncExec()爲()。