2010-10-07 20 views
16

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

यदि मैं ईडीटी पर प्रक्रिया करता हूं, तो यह स्पष्ट रूप से अंतिम उपयोगकर्ता को प्रक्रिया के दौरान कुछ भी करने से रोकता है। लेकिन चूंकि ईडीटी व्यस्त प्रसंस्करण में है, इसलिए यह संवाद की सामग्री को प्रस्तुत करने के लिए कभी भी नहीं मिलता है, इसलिए मुझे संवाद की रूपरेखा मिलती है।

लेकिन अगर मैं एक कार्यकर्ता सूत्र में प्रक्रिया करते हैं, अंत उपयोगकर्ता बटन क्लिक करें और बताएं कि कार्यकर्ता भी एक ही समय में जोड़ तोड़ रहा है, एक परिणाम के रूप बुरा सामान साथ हेरफेर करने के लिए EDT पैदा कर सकता है। यदि मैं संवाद मोडल करता हूं, ऐसा नहीं होता है, लेकिन स्विंग में मोडल का भी अर्थ है अवरुद्ध करता है, तो जिस क्षण मैं setVisible(true) को कॉल करता हूं, थ्रेड ब्लॉक हमेशा के लिए।

तो मेरा वर्तमान "समाधान" एक कार्यकर्ता थ्रेड का उपयोग करना है, और उसके बाद एक अलग थ्रेड को दूर करना जिसका उद्देश्य केवल setVisible की अवरुद्ध प्रकृति को अवशोषित करना है। निश्चित रूप से एक बेहतर समाधान होना चाहिए!

तो मैं एक संवाद कैसे प्राप्त करूं जो उपयोगकर्ता को शेष सिस्टम (मोडल) के साथ बातचीत करने से रोकता है लेकिन थ्रेड को अवरुद्ध नहीं करता है जो इसे दिखने का कारण बनता है?

+0

भी देखें: http://stackoverflow.com/questions/3954120/swing-modal-dialog-refuses-to-close-sometimes ट्यूटोरियल में – Zarkonnen

उत्तर

15

आपको ग्लासपेन का उपयोग करने से उपयोगकर्ता को बातचीत करने से रोकना चाहिए। अच्छी बात यह है कि यह उपयोगकर्ता के लिए मोडल है, न कि आपका प्रोग्राम, इसलिए आपका धागा अवरुद्ध नहीं होगा।

अच्छी खबर यह है कि आप इसे जीयूआई भाग को छायांकित करने जैसे शांत जीयूआई प्रभावों के लिए भी उपयोग कर सकते हैं और उपयोगकर्ता बातचीत नहीं कर सकता है। आप ग्लासपेन में एक व्यस्त gif छवि भी प्रदर्शित कर सकते हैं।

लिंक: -

  1. Official tutorial on GlassPane
  2. Some helpful tutorials
  3. Another tut
  4. Oreilly's Swing Hacks उत्कृष्ट है।
0

आपको कुछ गलत करना होगा। How to Use Progress Bars पर ट्यूटोरियल आज़माएं। यदि आप समझ सकते हैं कि यह कोड कैसे काम करता है, तो आपको आवश्यक सुविधा प्राप्त करने के लिए दिशा देना चाहिए।

ध्यान दें कि प्रगति बार आमतौर पर मोडल होते हैं।

+0

कोड मोडल प्रोग्रेस बार/संवाद का उत्पादन नहीं करता। स्विंगवर्कर में प्रक्रिया चल रही है, जबकि मैं अभी भी जीयूआई में हेरफेर कर सकता हूं। – Zarkonnen

+0

@Zarkonnen मुझे लगता है कि आप प्रोग्रेस मॉनिटर डेमो का उल्लेख करते हैं। इसके बजाय एक मोडल संवाद में एक जेपी प्रोग्रेसबार का प्रयास करें। –

+0

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

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