Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaでのSwingWorkerクラスの重要性は何ですか?


SwingWorker クラスを使用すると、非同期を実行できます タスク ワーカースレッド(長時間実行タスクなど)で、イベントディスパッチスレッド(EDT )からSwingコンポーネントを更新します。 タスクの結果に基づきます。 Java1.6バージョンで導入されました。

SwingWorkerクラス

  • java.swing.SwingWorker クラスはタスクワーカーであり、時間のかかるタスクをバックグラウンドで実行します。
  • SwingWorker インスタンスは3つのスレッドと相互作用します。現在 スレッドワーカースレッド 、およびイベントディスパッチスレッド(EDT)。
  • 現在 スレッド execute()を呼び出します タスクをバックグラウンドで開始し、すぐに戻るメソッド。
  • 労働者 スレッド doInBackground()の独自のバージョンを実行します バックグラウンドで継続的にメソッド。
  • イベントディスパッチスレッド(EDT) 労働者で何が起こったかを通知するために時々目を覚ます スレッド
  • doInBackground()の場合 が終了すると、イベントディスパッチスレッド(EDT) done()のバージョンを呼び出して通知してください メソッド。
  • 中間値を公開するには、 publish(V)と呼びます。 doInBackground()のメソッド 。 イベントディスパッチスレッド(EDT) process(List)のバージョンを呼び出すことで通知します メソッド。
  • progressプロパティを更新するには、 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クラスの重要性は何ですか?


  1. JavaのGridBagConstraintsクラスの重要性は何ですか?

    GridBagLayout は非常に柔軟なレイアウトマネージャーであり、制約を使用してコンポーネントを相互に相対的に配置できます。 。各GridBagLayout セルの動的な長方形グリッドを使用し、各コンポーネントはその表示領域と呼ばれる1つ以上のセルを占有します。 GridBagLayoutによって管理される各コンポーネント GridBagConstraintsに関連付けられています コンポーネントがその表示領域内にどのように配置されるかを指定するインスタンス。 GridBagConstraints GridBagConstraintsをカスタマイズできます 1つ以上のパブ

  2. JavaでのSwingUtilitiesクラスの重要性は何ですか?

    Javaでは、Swingコンポーネントが画面に表示された後、それらはイベント処理スレッドと呼ばれる1つのスレッドでのみ操作できます。 。別のブロックにコードを記述し、このブロックにイベントへの参照を与えることができます 処理 スレッド 。 SwingUtilities クラスには、 invokeAndWait()という2つの重要な静的メソッドがあります。 およびinvokeLater() コードのブロックへの参照をイベントに配置するために使用します キュー 。 構文 public static void invokeAndWait(Runnable doRun) throws Interr