Computer >> Máy Tính >  >> Lập trình >> Java

Tầm quan trọng của lớp SwingWorker trong Java là gì?


A SwingWorker lớp cho phép chúng tôi thực hiện không đồng bộ nhiệm vụ trong chuỗi công nhân (chẳng hạn như một tác vụ chạy dài), sau đó cập nhật các thành phần Swing từ Chuỗi điều phối sự kiện (EDT ) dựa trên kết quả nhiệm vụ. Nó đã được giới thiệu trong Phiên bản Java 1.6.

Lớp SwingWorker

  • java.swing.SwingWorker lớp là một task worker, thực hiện các tác vụ tốn nhiều thời gian trong nền.
  • A SwingWorker phiên bản tương tác với 3 chuỗi, Hiện tại chuỗi , Chuỗi người lao động chuỗi Công văn sự kiện (EDT).
  • Hiện tại chuỗi gọi thực thi () để bắt đầu nhiệm vụ ở chế độ nền và trả về ngay lập tức.
  • Người lao động chuỗi thực thi phiên bản doInBackground () của riêng chúng tôi liên tục trong nền.
  • Chuỗi sự kiện gửi đi (EDT) thỉnh thoảng thức dậy để thông báo cho chúng tôi về những gì đã xảy ra trong Worker chuỗi .
  • Khi doInBackground () đã kết thúc, Chuỗi sự kiện gửi đi (EDT) thông báo cho chúng tôi bằng cách gọi phiên bản done () của chúng tôi phương pháp.
  • Để xuất bản các giá trị trung gian, chúng tôi có thể gọi là xuất bản (V) trong doInBackground () . Chuỗi sự kiện gửi đi (EDT) thông báo cho chúng tôi bằng cách gọi phiên bản quy trình (Danh sách) của chúng tôi phương pháp.
  • Để cập nhật thuộc tính tiến trình, chúng tôi có thể gọi setProgress (i) trong doInBackground (). Chuỗi sự kiện gửi đi (EDT) thông báo cho chúng tôi bằng cách gọi phiên bản PropertyChangeListener của chúng tôi lớp học.
  • java.swing.JProgressbar lớp là một thành phần giao diện người dùng được thiết kế để hiển thị tiến trình của tác vụ nền được triển khai dưới dạng SwingWorker ví dụ.

Ví dụ

import java.awt.*;
import java.awt.event.*;;
import javax.swing.*;
public class SwingWorkerTest {
   public static void main(String[] args) {
      EventQueue.invokeLater(new Runnable() {
         @Override
         public void run() {
            JFrame frame = new JFrame();
            JButton button = new JButton();
            button.addActionListener(new ActionListener() {
               @Override
               public void actionPerformed(ActionEvent e) {
                  new GUIWorker().execute();
               }
            });
            button.setText("Click Me !!!");
            frame.getContentPane().add(button);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocationRelativeTo(null);
            frame.setSize(350, 300);
            frame.setVisible(true);
         }
      });
   }
}
class GUIWorker extends SwingWorker {
   private JFrame frame = new JFrame();
   private JDialog dialog = new JDialog(frame, "Swingworker Test", true);
   private JProgressBar progressBar = new JProgressBar();
   public GUIWorker() {
      progressBar.setString("Waiting on time");
      progressBar.setStringPainted(true);
      progressBar.setIndeterminate(true);
      dialog.getContentPane().add(progressBar);
      dialog.setSize(350, 300);
      dialog.setModal(false);
      dialog.setLocationRelativeTo(null);
      dialog.setVisible(true);
   }
   @Override
   protected Integer doInBackground() throws Exception {
      System.out.println( "GUIWorker doInBackground()" );
      Thread.sleep(10000);
      return 0;
   }
   @Override
   protected void done() {
      System.out.println("done");
      JLabel label = new JLabel("Task Complete");
      dialog.getContentPane().remove(progressBar);
      dialog.getContentPane().add(label);
      dialog.getContentPane().validate();
   }
}

Đầu ra

Tầm quan trọng của lớp SwingWorker trong Java là gì?

Tầm quan trọng của lớp SwingWorker trong Java là gì?