একটি 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();
}
}
আউটপুট

