Rumah >Java >javaTutorial >Bagaimanakah SwingWorker Boleh Menghalang Menyekat Benang Penghantaran Acara Apabila Melaksanakan Tugasan Jangka Panjang di Java?
SwingWorker in Java
Untuk melaksanakan tugasan jangka panjang dalam Swing tanpa menyekat Event Dispatch Thread (EDT), pertimbangkan untuk menggunakan SwingWorker. Artikel ini bertujuan untuk menangani kes penggunaan khusus yang berkaitan dengan soalan sebelumnya tentang "Memanggil cat semula daripada kelas lain di Java."
Memahami SwingWorker
SwingWorker membolehkan anda menjalankan tugasan secara tidak segerak, memastikan GUI responsif. Ia mengendalikan pertukaran data antara tugas latar belakang dan EDT.
Laksanakan SwingWorker dalam Java
Pertimbangkan coretan kod berikut, diilhamkan oleh yang sebelumnya soalan:
// **illustrates previous example** import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.SwingWorker; public class SwingWorkerExample { private static void main(String[] args) { // Initialize GUI JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); panel.setLayout(new FlowLayout()); // Create and add a button to trigger the SwingWorker JButton button = new JButton("Start Async Task"); panel.add(button); f.add(panel); f.pack(); f.setVisible(true); // SwingWorker to perform the task SwingWorker<Integer, Void> worker = new SwingWorker<Integer, Void>() { // executed on a background thread: @Override protected Integer doInBackground() throws Exception { // simulate a heavy task: Thread.sleep(3000); // replace with actual code... return 42; // return an integer result... } // executed on the EDT after doInBackground completes: @Override protected void done() { try { // get the result of the SwingWorker: int result = get(); } catch (Exception ex) { ex.printStackTrace(); } } }; // ActionListener for the button: button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // start the SwingWorker when the button is clicked: worker.execute(); } }); } }
Penjelasan:
Atas ialah kandungan terperinci Bagaimanakah SwingWorker Boleh Menghalang Menyekat Benang Penghantaran Acara Apabila Melaksanakan Tugasan Jangka Panjang di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!