2012-04-02 13 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

+0

私はEclipseプラグインを開発しており、Eclipse SDKを使用しています。 – sara

+1

あなたはSWTを調べる必要があるように聞こえます – pjp

答えて

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

かは、その別の選択肢SwingWorkerのを使用することができます。this snippetまたはDisplay.asyncExec()のようにDisplay.syncExec()を使用し、SWTで http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

+0

このコードをどこでどのように呼び出すのか詳しく教えてください。 – sara

+2

'EventQueue.invokeLater(...)'は、 'SwingUtilities.invokeLater(...)'と書かれていることがあります これはSWTではなくSwingに適用されることに注意してください。 http://sackoverflow.com/questions/7857531/swt-swing-threads-n-hell – pjp

+0

@サラを参照してください: 'SomeFunc'の呼び出しを@Wajdyが投稿したコードに置き換えて、' SomeFunc'の呼び出しを'run'メソッドです。 – Tudor

2

を。

関連する問題