通常、パラメータをスレッドに渡します。バックグラウンドでロジックを実行します。次に、SwingUtilities.invokeLater()を使用して、これらのオブジェクトのいずれか、またはUIスレッドのUI要素に対して行う必要のある変更をポストバックします。通常、バックグラウンドスレッドで実行するものと、UIスレッドで実行するものを指定できる単純なユーティリティを作成します。SwingWorkerは、使用するのが非常に苦痛だと思いますが、使用できるものです。このような単純なもの:
new AsyncThread<Param,T>() {
public T executeInBackground( Param param ) {
// do something long running
T result = // do something long running;
return T;
}
public void executeOnUI( T result ) {
// update the UI here, or modify the model, etc.
}
}.execute( param );
AsyncThreadは、別のスレッドでexecuteInBackground()メソッドを実行します。次に、内部的にSwingUtilities.invokeLater()を使用してUIスレッドにポストバックします。次に、executeOnUIはUIスレッドで実行されます。execute()メソッドは、バックグラウンドで実行したり、例外を処理したりするためのスレッドを作成できます。
GUIにスレッドを開始させ、GUIにそのモデルまたは必要な部分をスレッドに渡させます。逆の代わりに。そうすれば、実行中のバックグラウンドスレッドに関するフィードバックをUIに提供させることができます。ただし、UIスレッドが同時に読み取り/書き込みを行うモデルのメンバーにバックグラウンドスレッドをタッチ(書き込み/変更/変更)させることはできません。したがって、バックグラウンドスレッドに応じてモデルを変更する予定がある場合は、安全のためにモデルをUIスレッドにポストバックしてください。