2012-05-14 22 views
6

यदि आप जीयूआई संशोधित कर रहे हैं और आप एडब्ल्यूटी इवेंट डिस्पैचिंग थ्रेड में हैं, जैसे ActionListener में SwingUtilities.invokeLater(Runnable) का उपयोग करना चाहिए?एडब्ल्यूटी इवेंट डिस्पैचिंग थ्रेड में स्विंगउटिविटीज.वोकललेटर

+0

यह इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं। – Jeffrey

+0

@ जेफरी क्षमा करें, मैंने सवाल संपादित किया। – Stripies

+3

यह अभी भी उस पर निर्भर करता है जिसे आप पूरा करने की कोशिश कर रहे हैं। जब आप 'एक्शनलिस्टर' की 'क्रियाप्रवाह' विधि में होते हैं, तो आप ईडीटी पर होते हैं। हालांकि, ऐसे कुछ मामले हैं जहां आपको अन्य सभी श्रोताओं को एक ही घटना को संसाधित करने के बाद कुछ कार्रवाई करने की आवश्यकता होती है, इस मामले में आपको 'invokeLater' का उपयोग करना चाहिए। तो आप वास्तव में क्या करने की कोशिश कर रहे हैं? – Jeffrey

उत्तर

5

आपको हमेशा इवेंट डिस्पैच थ्रेड (ईडीटी) में जीयूआई अपडेट करना होगा। हालांकि, जैसा कि जेफरी टिप्पणियों में बताते हैं, ActionListener.actionPerformed स्विंग ऑब्जेक्ट पर विधि ईडीटी से पहले से ही से आती है।

आप बस चाहते हैं JButton unenabled सक्षम करने के लिए देखो/या एक JList से जोड़ने के लिए/आइटम निकालने, और अपने एक स्विंग घटक पर एक ActionListener के माध्यम से उन परिवर्तनों को करने, तो आप स्पष्ट रूप से SwingUtilities.invokeLater आह्वान करने के लिए नहीं होना चाहिए।

+1

+1, यदि ओपी 'JTextComponent' को साफ़ करने का प्रयास कर रहा था या' JScrollBar 'को फिर से स्थिति दे रहा था, तो' invokeLater' आवश्यक हो सकता था। लेकिन यह देखते हुए कि वह केवल 'जेबटन' को सक्षम/अक्षम कर रहा है और 'जेएलिस्ट' को संशोधित कर रहा है, ऐसा नहीं है। – Jeffrey

+0

@ जेफरी अगर मैं ऐसा कर रहा था तो यह जरूरी क्यों होगा? – Stripies

+0

जब तक हम ईडीटी में हैं, 'invokeLater' का उपयोग करके काफी बेकार है। जाहिर है अगर हम समय पर किसी बिंदु पर कुछ चलाना चाहते हैं, तो सामान्य रूप से वही प्रतिबंध लागू होते हैं (यानी क्योंकि हम ईडीटी से धागा शुरू करते हैं, हमें बिल्कुल मदद नहीं करता है)। – Voo