Java の 2 つの SwingWorker クラス間でデータを共有する方法
概要
Java アプリケーション内に複数のスレッドがある場合、それらの間でデータを共有することが必要になる場合があります。 SwingUtilities を拡張する SwingWorker クラスは、メイン イベント ディスパッチ スレッドをブロックせずに、時間のかかるタスクを別のスレッドで実行する便利な方法を提供します。
問題ステートメント
それぞれが異なるタスクの実行を担当する 2 つの SwingWorker クラス、FileLineCounterThread と FileDivisionThread があるシナリオを考えてみましょう。 FileLineCounterThread からの結果を FileDivisionThread に渡すとします。
解決策
SwingWorker クラス間でデータを共有するには、次の 2 つの手順が必要です。
バックグラウンド スレッドから EDT スレッドへの通信:
EDT スレッドでプロパティの変更をリッスンします:
サンプル実装
次のコード スニペットは、上記の手順を実装する方法を示しています。
import javax.swing.SwingWorker; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; public class DataSharingSwingWorker { public static void main(String[] args) { // Create the SwingWorker instances SwingWorker<Integer, Void> lineCounterWorker = new LineCounterWorker(); SwingWorker<String, Void> divisionWorker = new DivisionWorker(); // Add a listener to the line counter worker lineCounterWorker.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { if ("result".equals(evt.getPropertyName())) { // Retrieve the line count from the event int lineCount = (int) evt.getNewValue(); // Pass the line count to the division worker divisionWorker.passData(lineCount); } } }); // Execute the workers lineCounterWorker.execute(); divisionWorker.execute(); } private static class LineCounterWorker extends SwingWorker<Integer, Void> { @Override protected Integer doInBackground() throws Exception { // Perform line counting return null; // Placeholder for line count } @Override protected void done() { firePropertyChange("result", null, get()); } } private static class DivisionWorker extends SwingWorker<String, Void> { private int lineCount; public void passData(int lineCount) { this.lineCount = lineCount; } @Override protected String doInBackground() throws Exception { // Perform division operation based on the line count return null; // Placeholder for division result } @Override protected void done() { System.out.println("Division result: " + get()); } } }
結論
PropertyChangeListener メカニズムを活用することで、SwingWorker クラスは並列スレッド間でデータを効果的に共有できるため、複雑なマルチスレッド アプリケーションでの柔軟性と制御が向上します。
以上がJava の 2 つの SwingWorker クラス間でデータを共有するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。