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

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


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

構文

public static void invokeAndWait(Runnable doRun) throws InterruptedException, InvocationTargetException
public static void invokeLater(Runnable doRun)
パラメータdoRun 実行可能のインスタンスへの参照です インターフェース。この場合、実行可能 インターフェイスはスレッドのコンストラクターに渡されません。 実行可能 インターフェイスは、イベントスレッドのエントリポイントを識別する手段として使用されているだけです。新しく生成されたスレッドがrun()を呼び出すのと同じように 、イベントスレッドは run()を呼び出します メソッド キューで保留中の他のすべてのイベントを処理したとき。 InterruptedException invokeAndWait()を呼び出したスレッドがスローされた場合 またはinvokeLater()i ■ターゲットによって参照されるコードのブロックが完了する前に中断されました。 InvocationTargetException run()内のコードによってキャッチされない例外がスローされた場合にスローされます メソッド。

import javax.swing.*;
import java.lang.reflect.InvocationTargetException;
public class SwingUtilitiesTest {
   public static void main(String[] args) {
      final JButton button = new JButton("Not Changed");
      JPanel panel = new JPanel();
      panel.add(button);
      JFrame f = new JFrame("InvokeAndWaitMain");
      f.setContentPane(panel);
      f.setSize(300, 100);
      f.setVisible(true);
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      System.out.println(Thread.currentThread().getName()+" is going into sleep for 3 seconds");
      try {
         Thread.sleep(3000);
      } catch(Exception e){ }
      //Preparing code for label change
      Runnable r = new Runnable() {
         @Override
         public void run() {
            System.out.println(Thread.currentThread().getName()+"is going into sleep for 10 seconds");
            try {
               Thread.sleep(10000);
            } catch(Exception e){ }
          button.setText("Button Text Changed by "+ Thread.currentThread().getName());
          System.out.println("Button changes ended");
      }
    };
      System.out.println("Component changes put on the event thread by main thread");
          try {
            SwingUtilities.invokeAndWait(r);
         } catch (InvocationTargetException | InterruptedException e) {
            e.printStackTrace();
         }
      System.out.println("Main thread reached end");
   }
}

出力

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

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



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

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

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

    SwingWorker クラスを使用すると、非同期を実行できます タスク ワーカースレッド(長時間実行タスクなど)で、イベントディスパッチスレッド(EDT )からSwingコンポーネントを更新します。 ) タスクの結果に基づきます。 Java1.6バージョンで導入されました。 SwingWorkerクラス java.swing.SwingWorker クラスはタスクワーカーであり、時間のかかるタスクをバックグラウンドで実行します。 SwingWorker インスタンスは3つのスレッドと相互作用します。現在 スレッド 、ワーカースレッド 、およびイベントディスパッチスレッド(E