Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 SwingWorker 클래스의 중요성은 무엇입니까?


SwingWorker 클래스를 사용하면 비동기 를 수행할 수 있습니다. 작업 작업자 스레드(예:장기 실행 작업)에서 Event Dispatch Thread(EDT)에서 Swing 구성 요소를 업데이트합니다. ) 작업 결과를 기반으로 합니다. 자바 1.6 버전에서 도입되었습니다.

SwingWorker 클래스

  • java.swing.SwingWorker class는 백그라운드에서 시간 소모적인 작업을 수행하는 작업 작업자입니다.
  • SwingWorker 인스턴스가 3개의 스레드, 현재 와 상호작용합니다. 스레드 , 작업자 스레드Event Dispatch 스레드(EDT)
  • 현재 스레드 execute() 호출 백그라운드로 작업을 시작하고 즉시 반환하는 메서드입니다.
  • 근로자 스레드 doInBackground() 의 자체 버전을 실행합니다. 백그라운드에서 메서드를 계속 사용합니다.
  • 이벤트 디스패치 스레드(EDT) Worker 에서 일어난 일을 알리기 위해 때때로 깨어납니다. 스레드 .
  • doInBackground()일 때 종료되면 이벤트 디스패치 스레드(EDT) done() 버전을 호출하여 알려주세요. 방법.
  • 중간 값을 게시하기 위해 publish(V)를 호출할 수 있습니다. doInBackground()의 메소드 . 이벤트 디스패치 스레드(EDT) process(List) 버전을 호출하여 알려줍니다. 방법.
  • 진행률 속성을 업데이트하기 위해 setProgress(i)를 호출할 수 있습니다. doInBackground()의 메소드 이벤트 디스패치 스레드(EDT) PropertyChangeListener 버전을 호출하여 알려줍니다. 수업.
  • java.swing.JProgressbar 클래스는 SwingWorker 로 구현된 백그라운드 작업의 진행 상황을 표시하도록 설계된 UI 구성요소입니다. 예.

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

출력

Java에서 SwingWorker 클래스의 중요성은 무엇입니까?

Java에서 SwingWorker 클래스의 중요성은 무엇입니까?