首頁 >Java >java教程 >SwingWorker 如何防止 Java 中的 GUI 凍結?

SwingWorker 如何防止 Java 中的 GUI 凍結?

Susan Sarandon
Susan Sarandon原創
2024-12-22 15:38:14501瀏覽

How Can SwingWorker Prevent GUI Freezes in Java?

在Java 中使用SwingWorker

簡介

簡介

在事件調度上執行的長時間調度運行任務執行緒可以凍結GUI。這個問題可以透過使用 SwingWorker 來解決,它支援在單獨的執行緒上執行此類任務。

  1. 如何使用SwingWorker
  2. 定義SwingWorker 的子類別:子類別應該定義doInBackground 方法,其中長時間運行的任務是
  3. 執行SwingWorker:execute 方法用於在單獨的執行緒上啟動 SwingWorker。您可以將其連結到一個事件,例如單擊按鈕。

處理結果:get 方法可用來在任務完成後擷取結果。這可以在 done 方法中或在啟動 SwingWorker 的事件處理程序中完成。

範例
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);
    }
}
在此範例中,SwingWorker 用於執行耗時的任務,並在一秒後顯示包含結果的訊息方塊:

以上是SwingWorker 如何防止 Java 中的 GUI 凍結?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn