SwingWorker
स्विंगवर्कर जावा प्रोग्रामिंग भाषा के स्विंग पुस्तकालय के लिए सन माइक्रोसिस्टम्स द्वारा विकसित एक लोकप्रिय उपयोगिता वर्ग है। स्विंगवर्कर इवेंट डिस्पैचिंग थ्रेड के उचित उपयोग को सक्षम बनाता है। जावा 6 तक, स्विंगवर्कर जे. आर. ई. में शामिल है। स्विंगवर्कर के कई असंगत, अनौपचारिक संस्करण 1998 से 2006 तक बनाए गए थे, और जावा 6 से पहले के इन संस्करणों पर प्रचुर मात्रा में प्रलेखन से बचने के लिए ध्यान रखा जाना चाहिए। जावा 6 में उपयोग घटना प्रेषण सूत्र समस्या स्विंगवर्कर तब उपयोगी होती है जब उपयोगकर्ता-बातचीत घटना के बाद एक समय लेने वाला कार्य किया जाता है (उदाहरण के लिए, एक जे बटन दबाने पर एक विशाल एक्स. एम. एल. फ़ाइल को पार्स करना)। इसे करने का सबसे सीधा तरीका हैः निजी दस्तावेज़ दस्तावेज़;. जे. बटन बटन = नया जे. बटन ("ओपन एक्स. एम. एल".); button.addActionListener (नया ऐक्शनलिस्टनर () {@Override सार्वजनिक शून्य ऐक्शनपरफॉर्म (ऐक्शनइवेंट ई) {डी. ओ. सी. = लोड. एक्स. एम. एल. ();}); यह काम करेगा, लेकिन दुर्भाग्य से, लोड. एक्स. एम. एल. () विधि को मुख्य स्विंग थ्रेड (इवेंट डिस्पैचिंग थ्रेड) के समान थ्रेड में बुलाया जाएगा, इसलिए यदि विधि को प्रदर्शन करने के लिए समय चाहिए, तो जी. यू. आई. इस समय के दौरान फ्रीज हो जाएगा। स्विंगवर्कर समाधान यह समस्या जावा के लिए विशिष्ट नहीं है, लेकिन कई जीयूआई मॉडलों के लिए सामान्य है। स्विंगवर्कर इस दौरान जी. यू. आई. को प्रतिक्रियाशील रखते हुए किसी अन्य पृष्ठभूमि धागे पर समय लेने वाले कार्य को करके इसे हल करने का एक तरीका प्रस्तावित करता है। कार्यकर्ता बनाना निम्नलिखित कोड स्विंग वर्कर को परिभाषित करता है, जो लोड एक्स. एम. एल. () विधि कॉल को समाहित करता हैः स्विंग वर्कर कार्यकर्ता = नया स्विंग वर्कर <दस्तावेज़, शून्य> () {@Override सार्वजनिक दस्तावेज़ डोइनबैक ग्राउंड () {दस्तावेज़ इंटडॉक = लोड एक्स. एम. एल. (); रिटर्न इंटडॉक;}}; कार्यकर्ता निष्पादन निष्पादन विधि का उपयोग करके शुरू किया जाता है। परिणाम प्राप्त करना इस विधि का उपयोग करके परिणाम प्राप्त किया जा सकता है। चूंकि इवेंट डिस्पैच थ्रेड पर कॉल करने से कार्य पूरा होने तक रिपेंट सहित सभी कार्यक्रमों को संसाधित होने से रोक दिया जाता है, इसलिए लंबे ऑपरेशन के समाप्त होने से पहले इसे कॉल करने से बचना चाहिए। कार्य पूरा होने के बाद परिणाम प्राप्त करने के दो तरीके हैंः विधि को ओवरराइड करें। इस विधि को मुख्य घटना प्रेषण धागे पर कहा जाता है। निजी दस्तावेज़ दस्तावेज़;. स्विंग वर्कर <दस्तावेज़, शून्य> कार्यकर्ता = नया स्विंग वर्कर <दस्तावेज़, शून्य> () {@Override सार्वजनिक दस्तावेज़ डोइनबैकग्राउंड () {दस्तावेज़ इंटडॉक = लोड एक्स. एम. एल. (); रिटर्न इंटडॉक;} @Override सार्वजनिक शून्य किया गया () {ट्राई {डॉक = गेट ();} कैच (इंटरप्टेड एक्सेप्शन एक्स) {ex.printStackTrace ();} कैच (एग्जीक्यूशन एक्सेप्शन एक्स) {ex.printStackTrace ();} कार्यकर्ता विधि का उपयोग करके श्रोता को पंजीकृत करें। श्रोता को श्रमिक राज्य में परिवर्तनों के बारे में सूचित किया जाएगा। पूर्ण कार्यकर्ता उदाहरण निजी दस्तावेज़ दस्तावेज़;. जे. बटन बटन = नया जे. बटन ("ओपन एक्स. एम. एल".); button.addActionListener (नया एक्शनलिस्टनर ("ओपन एक्स. एम. एल".); button.addActionListener (नया एक्शनलिस्टनर) {@Override सार्वजनिक शून्य कार्रवाईपरफोर्म (एक्शनइवेंट ई) {स्विंगवर्कर <दस्तावेज़, शून्य> कार्यकर्ता = नया स्विंगवर्कर <दस्तावेज़, शून्य> () {@Override सार्वजनिक दस्तावेज़ डोइनबैक ग्राउंड () {दस्तावेज़ इंटडॉक = लोड एक्स. एम. एल. (); रिटर्न इंटडॉक;} @Override सार्वजनिक शून्य हो गया () सन ने पहले के जे. डी. के. के साथ उपयोग किए जाने वाले संस्करण जारी किए हैं, हालांकि वे अनौपचारिक संस्करण थे जो जावा एस. ई. का हिस्सा नहीं थे और मानक पुस्तकालय प्रलेखन में उनका उल्लेख नहीं था। इनमें से सबसे हालिया संस्करण 2003 का है और इसे अक्सर स्विंगवर्कर संस्करण 3 के रूप में जाना जाता है। दुर्भाग्य से, जे. डी. के. 6 स्विंगवर्कर और संस्करण 3 स्विंगवर्कर अलग-अलग विधि नामों का उपयोग करते हैं और संगत नहीं हैं। बैकपोर्ट संस्करण (नीचे देखें) अब पूर्व-जावा 6 उपयोग के लिए अनुशंसित है। स्विंगवर्कर 3 को त्वरित करने के लिए एक उदाहरण नीचे दिखाया गया हैः स्विंगवर्कर कार्यकर्ता = नया स्विंगवर्कर () {सार्वजनिक ऑब्जेक्ट निर्माण () {.// पृष्ठभूमि धागे के लिए कोड जोड़ें} सार्वजनिक शून्य समाप्त () {.// कोड जिसे आप यहां जोड़ते हैं वह यूआई धागे में चलेगा}}; worker.start ();// पृष्ठभूमि धागे को शुरू करें प्रारंभ () विधि निर्माण () विधि में जोड़े गए कोड को एक अलग धागे में निष्पादित करती है। पृष्ठभूमि धागा समाप्त होने पर सतर्क होने के लिए, केवल तैयार () विधि को ओवरराइड करने की आवश्यकता होती है। निर्माण () विधि एक परिणाम दे सकती है जिसे बाद में स्विंगवर्कर की गेट () विधि का उपयोग करके पुनर्प्राप्त किया जा सकता है। जावा 6 स्विंग वर्कर का बैकपोर्ट जावा 6 स्विंग वर्कर से जावा 5 का एक बैकपोर्ट http://swingworker.java.net पर उपलब्ध है। पैकेज नाम (org.jdesktop.swingworker) के अलावा, यह जावा 6 स्विंगवर्कर के साथ संगत है। समकक्ष System.ComponentModel.BackgroundWorker-. NET फ्रेमवर्क flash.system.Worker-एडोब फ्लैश android.os.AsyncTask-एंड्रॉइड संदर्भ जावा 7 के लिए बाहरी लिंक स्विंगवर्कर वर्ग प्रलेखन। स्विंग ट्यूटोरियल में ओरेकल के जावा कॉन्कुरेंसी से वर्कर थ्रेड्स और स्विंगवर्कर। जनवरी 2007 में जॉन ओ 'कॉनर द्वारा जावा एसई 6 में स्विंगवर्कर के साथ अनुप्रयोग प्रदर्शन में सुधार करें। जावा प्लेटफ़ॉर्म लेख उदाहरण के साथ जावा कोड