2012-01-10 6 views

答えて

3

は、読み取りスレッドへのあなたのGUIオブジェクトへの参照を渡し、読み出しスレッド呼び出しを持っている:あなたがバックグラウンドスレッドで入手可能な情報を持っているとき、あなただけ呼び出すことができますよりも

BackgroundThread background = new BackgroundThread(); 
backgroundThread.setCallback(new Foo() { 
    public void updateGUI(Bar bar) { 
     //... 
    } 
} 

彼がデータを受け取ったときのGUIインスタンスのメソッド。

GUIがSwingのGUIである場合、あなたはSwingUtilities.invokeLater()への呼び出しをラップする必要があります:

Thread readingThread = new MyReadingThread(gui); 
readingThread.start(); 

と読書スレッドで:SwingWorkerを具体的にするために設計されていることを

String data = readData(); 
SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     gui.dataHasBeenReceived(data); 
    } 
}); 

注意この種のユースケースです。

+0

私の簡単なプログラムで完璧に働いた説明とサンプルコードをありがとう。私はSwingWorkerについて聞いたことがありますが、あるスレッドから別のスレッドに短い文字列を送信するだけで、クラス全体を読んで学びたくはありませんでした。 – koleS

1

一般的には、コールバックオブジェクトを新しいスレッドに渡すことによって、結果が出るたびにそのコールバックを呼び出します。このコールバックはGUIを更新します。

"コールバック"は、あなたのカスタムインターフェイスを実装するオブジェクトで、結果を引数として取り込むことができます。

getCallback().updateGUI(bar); 
関連する問題