Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความสำคัญของคลาส SwingWorker ใน Java คืออะไร?


A SwingWorker คลาสช่วยให้เราสามารถดำเนินการ อะซิงโครนัส งาน ในเธรดผู้ปฏิบัติงาน (เช่น งานที่ใช้เวลานาน) จากนั้นอัปเดตส่วนประกอบ Swing จาก Event Dispatch Thread (EDT ) ตามผลงาน เปิดตัวใน Java 1.6 Version

คลาส SwingWorker

  • java.swing.SwingWorker class เป็นผู้ปฏิบัติงานซึ่งทำงานที่ต้องใช้เวลานานในเบื้องหลัง
  • A SwingWorker อินสแตนซ์โต้ตอบกับ 3 เธรด ปัจจุบัน กระทู้ , เธรดผู้ปฏิบัติงาน และ Event Dispatch thread(EDT)
  • กระแส ปัจจุบัน กระทู้ เรียก execute() วิธีการเริ่มงานไปที่พื้นหลังและกลับมาทันที
  • The คนงาน กระทู้ รัน doInBackground() . เวอร์ชันของเราเอง วิธีการอย่างต่อเนื่องในพื้นหลัง
  • The เธรดการส่งกิจกรรม (EDT) ตื่นขึ้นมาเป็นครั้งคราวเพื่อแจ้งให้เราทราบว่าเกิดอะไรขึ้นใน คนงาน กระทู้ .
  • เมื่อ doInBackground() สิ้นสุดลง เธรดการส่งกิจกรรม (EDT) แจ้งให้เราทราบโดยเรียกเวอร์ชันของเราว่า done() วิธีการ
  • ในการเผยแพร่ค่ากลาง เราสามารถเรียก publish(V) เมธอดใน doInBackground() . เธรดการส่งกิจกรรม (EDT) แจ้งให้เราทราบโดยเรียกเวอร์ชันของ กระบวนการ (รายการ) วิธีการ
  • ในการอัปเดตคุณสมบัติความคืบหน้า เราสามารถเรียก setProgress(i) เมธอดใน doInBackground() เธรดการส่งกิจกรรม (EDT) แจ้งให้เราทราบโดยเรียกเวอร์ชันของเราว่า PropertyChangeListener คลาส.
  • แถบ java.swing.JProgressbar class เป็นองค์ประกอบ UI ที่ออกแบบมาเพื่อแสดงความคืบหน้าของงานพื้นหลังที่ใช้งานเป็น SwingWorker ตัวอย่าง

ตัวอย่าง

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();
   }
}

ผลลัพธ์

ความสำคัญของคลาส SwingWorker ใน Java คืออะไร?

ความสำคัญของคลาส SwingWorker ใน Java คืออะไร?