यदि आप जीयूआई संशोधित कर रहे हैं और आप एडब्ल्यूटी इवेंट डिस्पैचिंग थ्रेड में हैं, जैसे ActionListener
में SwingUtilities.invokeLater(Runnable)
का उपयोग करना चाहिए?एडब्ल्यूटी इवेंट डिस्पैचिंग थ्रेड में स्विंगउटिविटीज.वोकललेटर
उत्तर
आपको हमेशा इवेंट डिस्पैच थ्रेड (ईडीटी) में जीयूआई अपडेट करना होगा। हालांकि, जैसा कि जेफरी टिप्पणियों में बताते हैं, ActionListener.actionPerformed
स्विंग ऑब्जेक्ट पर विधि ईडीटी से पहले से ही से आती है।
आप बस चाहते हैं JButton
unenabled सक्षम करने के लिए देखो/या एक JList
से जोड़ने के लिए/आइटम निकालने, और अपने एक स्विंग घटक पर एक ActionListener
के माध्यम से उन परिवर्तनों को करने, तो आप स्पष्ट रूप से SwingUtilities.invokeLater
आह्वान करने के लिए नहीं होना चाहिए।
+1, यदि ओपी 'JTextComponent' को साफ़ करने का प्रयास कर रहा था या' JScrollBar 'को फिर से स्थिति दे रहा था, तो' invokeLater' आवश्यक हो सकता था। लेकिन यह देखते हुए कि वह केवल 'जेबटन' को सक्षम/अक्षम कर रहा है और 'जेएलिस्ट' को संशोधित कर रहा है, ऐसा नहीं है। – Jeffrey
@ जेफरी अगर मैं ऐसा कर रहा था तो यह जरूरी क्यों होगा? – Stripies
जब तक हम ईडीटी में हैं, 'invokeLater' का उपयोग करके काफी बेकार है। जाहिर है अगर हम समय पर किसी बिंदु पर कुछ चलाना चाहते हैं, तो सामान्य रूप से वही प्रतिबंध लागू होते हैं (यानी क्योंकि हम ईडीटी से धागा शुरू करते हैं, हमें बिल्कुल मदद नहीं करता है)। – Voo
यह इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं। – Jeffrey
@ जेफरी क्षमा करें, मैंने सवाल संपादित किया। – Stripies
यह अभी भी उस पर निर्भर करता है जिसे आप पूरा करने की कोशिश कर रहे हैं। जब आप 'एक्शनलिस्टर' की 'क्रियाप्रवाह' विधि में होते हैं, तो आप ईडीटी पर होते हैं। हालांकि, ऐसे कुछ मामले हैं जहां आपको अन्य सभी श्रोताओं को एक ही घटना को संसाधित करने के बाद कुछ कार्रवाई करने की आवश्यकता होती है, इस मामले में आपको 'invokeLater' का उपयोग करना चाहिए। तो आप वास्तव में क्या करने की कोशिश कर रहे हैं? – Jeffrey