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

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

Trong Java, sau khi các thành phần xoay được hiển thị trên màn hình, chúng chỉ có thể được vận hành bởi một chuỗi được gọi là Chuỗi xử lý sự kiện . Chúng tôi có thể viết mã của mình trong một khối riêng biệt và có thể cung cấp cho khối này tham chiếu đến Sự kiện Xử lý chuỗi . Tiện ích xích đu lớp có hai phương thức tĩnh quan trọng, invokeAndWait () invokeLater () sử dụng để đưa các tham chiếu đến các khối mã vào sự kiện hàng đợi .

Cú pháp

public static void invokeAndWait(Runnable doRun) throws InterruptedException, InvocationTargetException
public static void invokeLater(Runnable doRun)

Tham số doRun là một tham chiếu đến một bản sao của Runnable giao diện. Trong trường hợp này, Runnable giao diện sẽ không được chuyển đến phương thức khởi tạo của một Thread. Runnable giao diện chỉ đơn giản là được sử dụng như một phương tiện để xác định điểm vào cho chuỗi sự kiện. Cũng giống như một chuỗi mới được tạo sẽ gọi run () , chuỗi sự kiện sẽ gọi run () phương pháp khi nó đã xử lý tất cả các sự kiện khác đang chờ xử lý trong hàng đợi. Ngoại lệ bị gián đoạn được ném nếu chuỗi có tên invokeAndWait () hoặc invokeLater () i s bị ngắt trước khi khối mã được tham chiếu bởi đích hoàn thành. InvocationTargetException được ném nếu mã bên trong run () phương pháp.

Ví dụ

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

Đầu ra

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

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