2009-01-29 12 views
30

मैं Substance को एकीकृत कर रहा हूं और अपने आवेदन में महसूस कर रहा हूं और इसके आंतरिक ईडीटी (इवेंट डिस्पैच थ्रेड) जांच दिनचर्या के बारे में कई समस्याओं में भाग गया हूं। पदार्थ ईडीटी के बाहर यूआई कक्षाओं का निर्माण करने से इंकार कर देता है। मैंने स्विंग/एडब्ल्यूटी के बहुत सारे काम किए हैं और मैं ईडीटी के संबंध में अधिकांश नियमों को जानता हूं। मैं घटकों को संशोधित करने के लिए स्विंगवॉर्कर, स्विंगउटिलटीज.inवोकलेटर का उपयोग करता हूं। मैं हमेशा यह है कि घटक हो सकता है निर्माण EDT के बाहर है, लेकिन एहसास हुआ और चालाकी से EDT पर होना चाहिए। दूसरे शब्दों में, आप पृष्ठभूमि में डिफ़ॉल्ट रूप से निर्माण और सेटअप कर सकते हैं लेकिन पैक/सेट करने के लिए कॉल ईडीटी के साथ-साथ किसी भी बाद की कॉल को घटक में हेरफेर करने के लिए होना चाहिए।क्या स्विंग/एडब्ल्यूटी विजेट्स को इवेंट डिस्पैच थ्रेड पर नहीं बनाया जा सकता है?

कारण मैं पूछता हूं कि मेरे पास विशेष रूप से "बीफ़ी" विंडो बनाने के लिए है, जिसमें कई विजेट, राज्य और संसाधन शामिल हैं (बहुत सारे आइकन)। पहले, मैंने एक स्विंगवर्कर की पृष्ठभूमि विधि पर खिड़की का निर्माण किया और विंडो को पूर्ण विधि में दिखाई दिया। कभी भी एक समस्या नहीं थी। सबस्टेंस पर स्विच करने पर, आंतरिक ईडीटी जांच मुझे काटती है।

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

यह रैपिंग अप ... यह घटना डिस्पैच थ्रेड पर घुमाओ/AWT विजेट के लिए नहीं का निर्माण सुरक्षित है?

उत्तर

39

सूर्य नियम 2004 में बदल गया है - इससे पहले कि, तुम थे ईडीटी के बाहर घटकों को बनाने की इजाजत दी गई और घटक को एहसास हुआ के बाद केवल ईडीटी में जाना पड़ा।

नया नियम अब पढ़ता है:

गतिरोध की संभावना से बचने के लिए, आप, अत्यधिक ध्यान कि घटकों और मॉडल स्विंग बनाई गई हैं, संशोधित रखना चाहिए और घटना से केवल पूछे थ्रेडपैचिंग थ्रेड।

this मेरा ब्लॉग पोस्ट अन्य संबंधित लेखों के लिंक सहित अधिक जानकारी देता है। ध्यान दें कि सभी आधिकारिक सूर्य examples को फिर से लिखा गया है और इसके बारे में बहुत सख्त हैं।

ऐतिहासिक रूप से, यह शायद बहु-कोर कंप्यूटरों की बढ़ती उपलब्धता थी क्योंकि डेस्कटॉप मशीनों ने नियम के पुन: निर्माण को प्रेरित किया - थ्रेडिंग मुद्दे क्लाइंट स्टैक पर अधिक से अधिक स्पष्ट हो गए, और ईडीटी पर बहुत सख्त होने के कारण दिशानिर्देश, उनमें से बहुत से शुरुआत से रोका जा सकता है।

+1

स्नीकी स्नीकी ... ठोस सबूत के लिए धन्यवाद, मैं लालसा चाहता था। रिफैक्टर करने का समय! – basszero

+0

यह समस्या का कारण बनने वाले डेडलॉक्स की तुलना में अधिक दौड़ की स्थिति है। –

+0

@tom: मैं दौड़ की स्थितियों के बारे में सहमत हूं - कभी दावा नहीं किया कि यह डेडलॉक्स थे, क्या मैंने (केवल 'थ्रेडिंग मुद्दों' को संदर्भित किया है)? – netzwerg

9

सं

सरल कारण यह है कि यहां तक ​​कि EDT कुछ दुर्लभ मामलों में गतिरोध के लिए पसंद करती है और सामान्य रूप में यह जब स्विंग का उपयोग कर यूआई गतिरोध आसान है (या तो मैं बताया गया है)। मेरा सुझाव है कि आप किरिल के (मादक देव) से इन तीन लेख पढ़ने के ब्लॉग:

संबंधित मुद्दे

 संबंधित मुद्दे