Rumah >Java >javaTutorial >Bagaimana untuk Berkongsi Data Antara Dua Kelas SwingWorker di Java?

Bagaimana untuk Berkongsi Data Antara Dua Kelas SwingWorker di Java?

DDD
DDDasal
2024-11-18 08:44:02599semak imbas

How to Share Data Between Two SwingWorker Classes in Java?

Cara Berkongsi Data Antara Dua Kelas SwingWorker di Java

Pengenalan

Apabila bekerja dengan berbilang benang dalam aplikasi Java, kadangkala menjadi perlu untuk berkongsi data antara mereka. Kelas SwingWorker, yang memanjangkan SwingUtilities, menyediakan cara yang mudah untuk melaksanakan tugas yang memakan masa dalam urutan yang berasingan, tanpa menyekat urutan penghantaran acara utama.

Pernyataan Masalah

Pertimbangkan senario di mana anda mempunyai dua kelas SwingWorker, FileLineCounterThread dan FileDivisionThread, masing-masing bertanggungjawab untuk melaksanakan tugas yang berbeza. Katakan anda ingin menghantar hasil daripada FileLineCounterThread ke FileDivisionThread.

Penyelesaian

Perkongsian data antara kelas SwingWorker melibatkan dua langkah:

  1. Berkomunikasi dari utas latar belakang ke utas EDT:

    • Buat PropertyChangeListener dan tambahkannya pada SwingWorker.
    • Setelah selesai() kaedah SwingWorker, cetuskan PropertyChangeEvent dengan data yang dikehendaki.
  2. Mendengar perubahan harta dalam urutan EDT:

    • Buat objek yang melaksanakan antara muka PropertyChangeListener.
    • Daftarkan pendengar ini dengan SwingWorker.
    • Dalam kaedah propertyChange() pendengar, dapatkan dan kendalikan data yang dihantar daripada utas latar belakang .

Sampel Pelaksanaan

Coretan kod berikut menunjukkan cara melaksanakan langkah di atas:

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

Kesimpulan

Dengan memanfaatkan mekanisme PropertyChangeListener, kelas SwingWorker boleh berkongsi data dengan berkesan antara benang selari, membolehkan lebih fleksibiliti dan kawalan dalam aplikasi berbilang benang yang kompleks.

Atas ialah kandungan terperinci Bagaimana untuk Berkongsi Data Antara Dua Kelas SwingWorker di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn