কম্পিউটার টিউটোরিয়াল

জাভাতে SwingWorker ক্লাসের গুরুত্ব কী?

একটি SwingWorker ক্লাস আমাদের একটি অ্যাসিনক্রোনাস টাস্ক একটি ওয়ার্কার থ্রেডে (যেমন একটি লম্বা-চলমান টাস্ক) পারফর্ম করতে সক্ষম করে তারপর ইভেন্ট ডিসপ্যাচ থ্রেড (EDT)- থেকে সুইং কম্পোনেন্ট আপডেট করে টাস্কের ফলাফলের উপর ভিত্তি করে। এটি জাভা ১.৬ ভার্সনে পরিচয় করানো হয়েছিল।

SwingWorker ক্লাস

  • java.swing.SwingWorker ক্লাস হল একটি টাস্ক ওয়ার্কার, যা টাইম-কনসামিং টাস্ক ব্যাকগ্রাউন্ডে পারফর্ম করে।
  • একটি SwingWorker ইনস্ট্যান্স ৩টি থ্রেডের সাথে ইন্টারঅ্যাক্ট করে, কারেন্ট থ্রেড, ওয়ার্কার থ্রেড, এবং ইভেন্ট ডিসপ্যাচ থ্রেড (EDT)।
  • কারেন্ট থ্রেড execute() মেথড কল করে টাস্ককে ব্যাকগ্রাউন্ডে কিক অফ করে এবং অবিলম্বে রিটার্ন করে।
  • ওয়ার্কার থ্রেড আমাদের নিজস্ব ভার্সন doInBackground() মেথডটি liên tục ব্যাকগ্রাউন্ডে এক্সিকিউট করে।
  • ইভেন্ট ডিসপ্যাচ থ্রেড (EDT) সময়-सময়ে জেগে উঠে আমাদের জানাতে পারে ওয়ার্কার থ্রেড-এ কী ঘটেছে।
  • যখন doInBackground() শেষ হয়, ইভেন্ট ডিসপ্যাচ থ্রেড (EDT) আমাদের আমাদের নিজস্ব ভার্সন done() মেথড কল করে নোটিফাই করে।
  • ইন্টারমিডিয়েট ভ্যালু পাবলিশ করতে, আমরা doInBackground()-এ publish(V) মেথড কল করতে পারি। ইভেন্ট ডিসপ্যাচ থ্রেড (EDT) আমাদের process(List) মেথডের নিজস্ব ভার্সন কল করে নোটিফাই করে।
  • প্রগ্রেস প্রপার্টি আপডেট করতে, আমরা doInBackground()-এ setProgress(i) মেথড কল করতে পারি। ইভেন্ট ডিসপ্যাচ থ্রেড (EDT) আমাদের PropertyChangeListener ক্লাসের নিজস্ব ভার্সন কল করে নোটিফাই করে।
  • java.swing.JProgressBar ক্লাস হল একটি 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 ক্লাসের গুরুত্ব কী?

জাভাতে SwingWorker ক্লাসের গুরুত্ব কী?

  1. জাভাতে Container ক্লাসের গুরুত্ব কী?

  2. জাভাতে CardLayout ক্লাসের গুরুত্ব কী?

  3. জাভাতে GridBagConstraints ক্লাসের গুরুত্ব কী?

  4. জাভাতে SwingUtilities ক্লাসের গুরুত্ব কী?