Rumah > Java > javaTutorial > Bagaimanakah SwingWorker Boleh Mencegah GUI Membeku di Jawa?

Bagaimanakah SwingWorker Boleh Mencegah GUI Membeku di Jawa?

Susan Sarandon
Lepaskan: 2024-12-22 15:38:14
asal
462 orang telah melayarinya

How Can SwingWorker Prevent GUI Freezes in Java?

Menggunakan SwingWorker dalam Java

Pengenalan

Tugas jangka panjang yang dilaksanakan pada Penghantaran Acara Benang boleh membekukan GUI. Isu ini boleh diatasi dengan menggunakan SwingWorker, yang menyokong pelaksanaan tugas sedemikian pada urutan yang berasingan.

Cara Menggunakan SwingWorker

  1. Tentukan subkelas SwingWorker: Subkelas harus mentakrifkan kaedah doInBackground, di mana tugasan jangka panjang dilaksanakan, dan kaedah selesai, yang akan dipanggil apabila tugasan selesai.
  2. Laksanakan SwingWorker: Kaedah laksana digunakan untuk memulakan SwingWorker pada yang berasingan benang. Anda boleh memautkan ini ke acara, seperti klik butang.
  3. Kendalikan hasilnya: Kaedah get boleh digunakan untuk mendapatkan semula hasil tugasan selepas selesai. Ini boleh dilakukan dalam kaedah yang dilakukan atau dalam pengendali acara yang memulakan SwingWorker.

Contoh

Dalam contoh ini, SwingWorker digunakan untuk melakukan tugas yang memakan masa dan paparkan kotak mesej dengan hasilnya satu saat kemudian:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SwingWorkerExample {

    private static void makeGUI() {
        final JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().setLayout(new FlowLayout());

        class AnswerWorker extends SwingWorker<Integer, Integer> {
            protected Integer doInBackground() throws Exception {
                Thread.sleep(1000);
                return 42;
            }

            protected void done() {
                JOptionPane.showMessageDialog(f, get());
            }
        }

        JButton b = new JButton("Answer!");
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new AnswerWorker().execute();
            }
        });

        f.getContentPane().add(b);
        f.getContentPane().add(new JButton("Nothing"));
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(SwingWorkerExample::makeGUI);
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah SwingWorker Boleh Mencegah GUI Membeku di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan