Rumah > Java > javaTutorial > Bagaimanakah SwingWorker Boleh Menghalang GUI Membeku dalam Aplikasi Java Swing?

Bagaimanakah SwingWorker Boleh Menghalang GUI Membeku dalam Aplikasi Java Swing?

DDD
Lepaskan: 2024-12-20 11:45:10
asal
526 orang telah melayarinya

How Can SwingWorker Prevent GUI Freezes in Java Swing Applications?

SwingWorker: Panduan Komprehensif untuk Tugas Asynchronous

Dalam Java Swing, menjalankan tugas yang berjalan lama pada Event Dispatch Thread (EDT) boleh membekukan GUI. Untuk menangani perkara ini, SwingWorker menawarkan penyelesaian yang berkuasa untuk melaksanakan operasi yang memakan masa dalam urutan berasingan tanpa menyekat GUI.

Memahami SwingWorker

SwingWorker ialah kelas abstrak yang direka bentuk khusus untuk aplikasi Swing. Ia membolehkan pembangun melaksanakan tugasan secara tidak segerak dalam urutan latar belakang dan mendapatkan semula keputusan pada EDT apabila tugasan selesai.

Melaksanakan SwingWorker dalam Kod Anda

Mengenai anda sebelumnya soalan tentang mengecat semula dari kelas lain, SwingWorker boleh digunakan sebagai berikut:

  1. Extend SwingWorker: Cipta kelas Java baharu yang memanjangkan SwingWorker dan nyatakan jenis tugasan yang anda mahu lakukan (cth., Integer untuk pengiraan integer jangka panjang) .
  2. Timpa doInBackground: Dalam kelas lanjutan, ganti kaedah doInBackground untuk menentukan tugasan yang anda ingin laksanakan dalam urutan latar belakang.
  3. Timpa selesai: Kaedah ini dipanggil apabila tugasan selesai dan harus digunakan untuk melaksanakan sebarang tindakan yang perlu pada EDT, seperti mengecat semula komponen Swing.
  4. Laksanakan SwingWorker: Gunakan kaedah laksana SwingWorker untuk memulakan tugasan pada urutan latar belakang.

Contoh Pelaksanaan

Berikut ialah contoh yang menunjukkan cara untuk gunakan SwingWorker untuk mengira jujukan Fibonacci dan paparkan hasilnya dalam kotak mesej selepas a kedua:

class FibonacciWorker extends SwingWorker<Integer, Integer> {
  @Override
  protected Integer doInBackground() throws Exception {
    return fibonacci(n); // Calculate the Fibonacci sequence for n
  }

  @Override
  protected void done() {
    try {
      JOptionPane.showMessageDialog(null, get());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  private int fibonacci(int n) {
    return (n <= 1) ? n : fibonacci(n - 1) + fibonacci(n - 2);
  }
}

public static void main(String[] args) {
  new FibonacciWorker().execute(); // Execute the SwingWorker
}
Salin selepas log masuk

Sumber Lain

  • [Tutorial Java tentang SwingWorker](https://docs.oracle.com/javase/tutorial/uiswing /concurrency/swingworker.html)
  • [Sun Java SE 6 Swing Worker Tutorial](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html)

Atas ialah kandungan terperinci Bagaimanakah SwingWorker Boleh Menghalang GUI Membeku dalam Aplikasi Java Swing?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan