एक स्विंगवर्कर वर्ग हमें एक एसिंक्रोनस . करने में सक्षम बनाता है कार्य वर्कर थ्रेड में (जैसे कि लंबे समय तक चलने वाला कार्य) फिर इवेंट डिस्पैच थ्रेड (EDT से स्विंग घटकों को अपडेट करें। ) कार्य परिणामों के आधार पर। इसे Java 1.6 संस्करण . में पेश किया गया था
स्विंगवर्कर वर्ग
- द java.swing.SwingWorker वर्ग एक कार्य कार्यकर्ता है, जो पृष्ठभूमि में समय लेने वाले कार्यों को करता है।
- एक स्विंगवर्कर इंस्टेंस 3 थ्रेड्स के साथ इंटरैक्ट करता है, वर्तमान धागा , कार्यकर्ता सूत्र , और इवेंट डिस्पैच थ्रेड (EDT).
- द वर्तमान धागा निष्पादित करें () . को कॉल करता है कार्य को पृष्ठभूमि में शुरू करने और तुरंत वापस लौटने की विधि।
- द कार्यकर्ता धागा doInBackground() . के हमारे अपने संस्करण को निष्पादित करता है विधि लगातार पृष्ठभूमि में।
- द इवेंट डिस्पैच थ्रेड (ईडीटी) कार्यकर्ता . में जो हुआ उसके बारे में हमें सूचित करने के लिए समय-समय पर जागना धागा ।
- जब doInBackground() समाप्त हो गया है, ईवेंट डिस्पैच थ्रेड (ईडीटी) किया गया () . के हमारे संस्करण को कॉल करके हमें सूचित करें विधि।
- मध्यवर्ती मूल्यों को प्रकाशित करने के लिए, हम publish(V) . को कॉल कर सकते हैं doInBackground() . में विधि . इवेंट डिस्पैच थ्रेड (EDT) प्रक्रिया(सूची) . के हमारे संस्करण को कॉल करके हमें सूचित करता है विधि।
- प्रगति गुण को अद्यतन करने के लिए, हम सेटप्रोग्रेस(i) . को कॉल कर सकते हैं doInBackground(). . में विधि ईवेंट डिस्पैच थ्रेड (ईडीटी) PropertyChangeListener . के हमारे संस्करण को कॉल करके हमें सूचित करता है कक्षा।
- द java.swing.JProgressbar class एक UI घटक है जिसे स्विंगवर्कर के रूप में कार्यान्वित पृष्ठभूमि कार्य की प्रगति दिखाने के लिए डिज़ाइन किया गया है उदाहरण।
उदाहरण
आयात करें {@ ओवरराइड सार्वजनिक शून्य रन() {जेएफआरएएम फ्रेम =नया जेएफआरएएम (); जेबटन बटन =नया जेबटन (); बटन जोड़ें। (); }}); बटन। सेटटेक्स्ट ("मुझे क्लिक करें !!!"); फ्रेम। getContentPane ()। जोड़ें (बटन); फ्रेम। सेटडिफॉल्टक्लोजऑपरेशन (जेफ्रेम। EXIT_ON_CLOSE); फ्रेम। (350, 300); फ्रेम.सेटविजिबल (सच); } }); }}वर्ग GUIWorker स्विंगवर्कर का विस्तार करता है {निजी JFrame फ्रेम =नया JFrame (); निजी JDialog संवाद =नया JDialog (फ्रेम, "स्विंगवर्कर टेस्ट", सत्य); निजी जेपी प्रोग्रेसबार प्रगतिबार =नया जेपी प्रोग्रेसबार (); सार्वजनिक GUIWorker () {प्रगतिबार.सेटस्ट्रिंग ("समय पर प्रतीक्षा कर रहा है"); प्रोग्रेसबार.सेटस्ट्रिंगपेंटेड (सच); प्रगतिबार.सेट अनिश्चित (सच); संवाद.getContentPane ()। जोड़ें (प्रगतिबार); डायलॉग.सेटसाइज (350, 300); डायलॉग.सेटमोडल (झूठा); डायलॉग.सेटलोकेशन रिलेटिव टू (अशक्त); डायलॉग.सेटविज़िबल (सच); } @Override संरक्षित पूर्णांक doInBackground () अपवाद फेंकता है {System.out.println ("GUIWorker doInBackground ()"); थ्रेड.स्लीप (10000); वापसी 0; } @ ओवरराइड संरक्षित शून्य किया गया () { System.out.println ("किया गया"); जेएलएबल लेबल =नया जेएलएबल ("कार्य पूर्ण"); संवाद.getContentPane ()। निकालें (प्रगतिबार); संवाद.getContentPane ()। जोड़ें (लेबल); संवाद। getContentPane ()। मान्य (); }}आउटपुट