दिलचस्प पोस्ट
IntelliJ IDEA के भीतर SBT का उपयोग कर एक उबेर जार (फैट जार) कैसे बना सकता है? एकाधिक HTTP अनुरोधों को समानांतर में चलाने की कोशिश कर रहा है, लेकिन विंडोज (रजिस्ट्री) द्वारा सीमित किया जा रहा है सूची दृश्य में चेकबॉक्स का पाठ कैसे बदल सकता है? क्या खिड़कियों के साथ अजगर का उपयोग करके कच्चे उपकरणों तक पहुंच प्राप्त करना संभव है? MySQL पासवर्ड की अवधि समाप्त हो गई। कनेक्ट नहीं कर सकते पायथन में पायथन कोड वाले स्ट्रिंग को मैं कैसे निष्पादित कर सकता हूं? मैं कितने UIImageViews को एक ही आउटलेट से कनेक्ट करने के लिए IBOutletCollection का उपयोग कर सकता हूं? ArrayList प्रारंभिक क्षमता और सूचकांकऑटोबॉफ़ अपवाद एक असेंबली से एक संसाधन उपकरण लोड करें फेसबुक आईफोन ऐप द्वारा समर्थित सभी कस्टम यूआरएल योजनाएं क्या हैं? एक स्ट्रिंग सूत्र को "वास्तविक" सूत्र में कैसे चालू करें संकलन "के साथ स्थानांतरण R_X86_64_32` .rodata.str1.8 'के साथ विफल हो सकता है जब साझा ऑब्जेक्ट बनाने में नहीं किया जा सकता " पाठ को आउटलाइन प्रभाव स्विफ्ट में एनएसएसटीइंग से एनएसडीटा बनाना रिफ्रेश पर स्वचालित ब्राउज़र स्क्रॉल को रोकें

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

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

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

Solutions Collecting From Web of "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 को कॉल करने के लिए, यह नहीं है। यह तब होगा जब स्वयं आवेदन से पहले कुछ धागा शुरू किया।