दिलचस्प पोस्ट
मैं जावा में एक निर्देशिका में फ़ाइलों के माध्यम से कैसे पुनरावृत्त है? MySQL क्वेरी / क्लोज़ निष्पादन आदेश क्या सी ++ एसटीएल कंटेनर से निकलने का कोई वास्तविक जोखिम है? सफारी ब्राउज़र खोजें परिणामी पूर्णांक दृश्यों के अंतराल का पता लगाएं एक डेटा फ्रेम के पूरक ढूंढें (एंटी-जॉब) एक विस्तारित उपयोगकर्ता प्रोफ़ाइल बनाना C ++ में रिटर्न स्टेटमेंट को छोड़कर जावास्क्रिप्ट या jQuery ब्राउज़र बैक बटन क्लिक डिटेक्टर विंडोज में जेएनए कुंजीपटल हुक काम एफ # स्निपेट्स शब्दकोश मर्ज के शब्दकोश Android पर लंबी नल पर संदर्भ मेनू को अक्षम करना स्ट्रिंग के रूप में दिए गए अभिव्यक्ति का मूल्यांकन करें एसक्यूएल में टाइमटाइम फॉर्मेट से टाइम कैसे प्राप्त करें?

SwingUtilities.invokeLater () क्यों इसकी आवश्यकता है?

SwingUtilities.invokeLater() में जीयूआई अपडेट कोड डालना आवश्यक क्यों है?

क्यों स्वयं आंतरिक घुसने में इसे आंतरिक तौर पर ध्यान नहीं दिया जाता? कॉल करने वाले को कैसे ध्यान देना चाहिए कि स्विंग UI अपडेट कैसे प्रबंधित करता है?

वेब के समाधान से एकत्रित समाधान "SwingUtilities.invokeLater () क्यों इसकी आवश्यकता है?"

स्विंग ऑब्जेक्ट थ्रेड सुरक्षित नहीं हैं SwingUtilities.invokeLater() एक कार्य को बाद में कुछ बिंदुओं पर निष्पादित करने की अनुमति देता है, जैसा कि नाम से पता चलता है; लेकिन इससे भी महत्वपूर्ण बात यह है कि कार्य एडब्ल्यूटी इवेंट डिस्पैच धागा पर चलाया जाएगा। invokeLater का उपयोग करते invokeLater , कार्य को एसिंक्रोनस रूप से निष्पादित किया जाता है; वहाँ भी invokeAndWait , जो कार्य नहीं समाप्त हो रहा है जब तक कार्य निष्पादित समाप्त हो गया है।

स्विंग धागा-सुरक्षित नहीं करने के फैसले के बारे में कुछ जानकारी यहां पायी जा सकती है: बहुस्तरीय टूलकिट: एक असफल सपना?

क्योंकि घटना प्रेषण धागा में जीयूआई अपडेट किया जाना चाहिए। यदि आप एक अलग थ्रेड में काम कर रहे हैं, तो invokeLater अपडेट में कर रहे हैं। बाद में इसे अपने थ्रेड से और इवेंट धागा में invokeLater

यहां अधिक स्पष्टीकरण: http://www.oracle.com/technetwork/java/painting-140037.html

स्विंग पर बड़ी अद्यतनों (डेटाबेस से जेटीबल को पुनर्पूंजीकरण की तरह) के लिए स्मार्ट चीज अंतर्निहित मॉडल प्राप्त करना है, अपने थ्रेड में मॉडल पर अपडेट करें, फिर invokeLater का उपयोग करके एक नोटिफिकेशन बंद करें यह आपके GUI को घटनाओं को प्रतिसाद दे रहा है और फिर से तैयार कर रहा है। यदि अद्यतन बहुत व्यापक होने जा रहा है, तो आप इन सूचनाओं को invokeLater साथ-साथ नियमित अंतराल पर भी invokeLater सकते हैं, जबकि आप अपडेट कर रहे हैं, जैसे कि हर दूसरे या दो

घुमाव एकल-थ्रेडेड है। UI के हर अद्यतन को तथाकथित EDT – घटना- dispander धागा जो मुख्य जीयूआई थ्रेड स्विंग (और मुझे लगता है कि एडब्ल्यूटी) का उपयोग करता है से होना चाहिए। यदि आप ऐसा नहीं करते हैं, तो अजीब चीजें हो सकती हैं या हो सकती हैं (हालांकि मुझे विंडोज एफओआरएस को यहां बेहतर पसंद है, जो कि आप गलत तरीके से करते हुए अपवाद फेंकता है)।

कहा जा रहा है कि, आपको हर यूआई ऑपरेशन को SwingUtilities.invokeLater() में लपेट करने की आवश्यकता नहीं है – यदि आप लिख रहे हैं तो पहले से ही EDT द्वारा निष्पादित किया गया है, यह आवश्यक नहीं है। इसलिए एक बटन क्लिक के लिए ActionListener को इसकी आवश्यकता नहीं है लेकिन बाहरी वस्तु पर एक श्रोता, कुछ अन्य धागे में चल रहा है, जो कहीं और JLabel अपडेट करता है – वहां आपको इसकी आवश्यकता है

घुमाव एक थ्रेड सुरक्षित जीयूआई टूलकिट के लिए नहीं लिखा गया था, इसलिए किसी भी डेडलॉक से बचने के लिए सभी जीयूआई अपडेट एक थ्रेड से होने चाहिए। स्विंग में यह इवेंट डिस्पैचर थ्रेड (एडीटी) है।

अधिक जानकारी के लिए जावा ट्यूटोरियल से स्विंग में समवर्ती देखें। यह इस ब्लॉग प्रविष्टि का भी संदर्भ देता है कि क्यों एक multithreaded GUI टूलकिट लिखना कठिन है।

घटकों की सभी पेंटिंग को एक धागे में किया जाना चाहिए, इसलिए, उन्हें ठीक से प्रस्तुत किया जाता है। इस तरह से घटक पता चलेगा कि किस भाग को पहले ही चित्रित किया गया है और किस भाग में नहीं है।

यदि आप EDT के बाहर एक "पेंटिंग" संबंधित विधि (पेंट, अपडेट, पेंट कम्पेनेंट, शो, सेट विसबीबल, पैक इत्यादि) का आह्वान करते हैं, तो आप दो अलग-अलग धागे में पेंट करने का प्रयास करेंगे, और इससे समस्याएं आ सकती हैं

जब आपको यूआई को अपडेट करने के लिए दूसरे थ्रेड का इस्तेमाल करना पड़ता है, तो आपको इसे इनवॉललेटर सुविधा से जोड़ना चाहिए, जो बदले में इसे आपके लिए ईडीटी में डाल देगा, ताकि आप अभी भी एक ही धागे में पेंट कर सकें।

यदि आप पहले से ही एडीटी में चलने वाली किसी विधि में कोडिंग कर रहे हैं, तो इसका उपयोग करने की आवश्यकता नहीं है (उदाहरण के लिए, actionPerformed या paint या उन में से एक) या यदि आप कोड निष्पादित कर रहे हैं, तो UI संबंधित नहीं है (उदाहरण के लिए, फ़ाइलें प्रसंस्करण पृष्ठभूमि में आदि)

इन सभी अवधारणाओं को बेहतर ढंग से समझने के लिए: एकल धागा नियम

SwingUtilities.invokeLater ()

कारणों को रद्द करने के लिए AWT घटना पर अतुल्यकालिक निष्पादित करने के लिए doRun.run () करता है। यह तब होगा जब सभी लंबित एडब्ल्यूटी घटनाओं पर कार्रवाई की गई है। इस पद्धति का उपयोग तब किया जाना चाहिए जब कोई अनुप्रयोग थ्रेड को GUI अपडेट करने की आवश्यकता हो।

दूसरों को दोहराएं: स्विंग धागा सुरक्षित नहीं है इसलिए एक थ्रेड संगामी समस्याओं से बचने के लिए सभी अपडेट करना चाहिए। invokeLater घटना प्रसंस्करण धागे के अंदर कुछ निष्पादित करने के लिए एक उपयोगिता विधि है।

क्यों घुमाएं आंतरिक रूप से नहीं करता है: यह मेरा इंप्रेशन है … मुझे लगता है क्योंकि यह हर जगह होगा जहां हर जगह एक अद्यतन हो रहा है। यह स्विंग कोड को ब्लोट करेगा, कोड की समीक्षा और रखरखाव को अलग करता है।

दूसरी ओर यह एक आवेदन के लिए कि यह जानने के लिए कि यह GUI थ्रेड के अंदर निष्पादन नहीं कर रहा है और invokeLater को कॉल करने के लिए, यह नहीं है। यह तब होगा जब स्वयं आवेदन से पहले कुछ धागा शुरू किया।