एक कठोर सवाल है, लेकिन मैं वास्तव में इसे काम पर नहीं ला सकता: मेरे पास स्विंग एप्लिकेशन में कुछ लंबी चल रही प्रक्रिया है जिसमें कई मिनट लग सकते हैं। मैं इस प्रक्रिया को चालू करते समय उपयोगकर्ता को एक प्रगति संवाद प्रदर्शित करना चाहता हूं। मैं उपयोगकर्ता को आगे की कार्रवाई करने से रोकना चाहता हूं, उदाहरण के लिए प्रक्रिया चालू होने पर बटन दबाकर।गैर-अवरुद्ध मोडल स्विंग प्रगति संवाद
यदि मैं ईडीटी पर प्रक्रिया करता हूं, तो यह स्पष्ट रूप से अंतिम उपयोगकर्ता को प्रक्रिया के दौरान कुछ भी करने से रोकता है। लेकिन चूंकि ईडीटी व्यस्त प्रसंस्करण में है, इसलिए यह संवाद की सामग्री को प्रस्तुत करने के लिए कभी भी नहीं मिलता है, इसलिए मुझे संवाद की रूपरेखा मिलती है।
लेकिन अगर मैं एक कार्यकर्ता सूत्र में प्रक्रिया करते हैं, अंत उपयोगकर्ता बटन क्लिक करें और बताएं कि कार्यकर्ता भी एक ही समय में जोड़ तोड़ रहा है, एक परिणाम के रूप बुरा सामान साथ हेरफेर करने के लिए EDT पैदा कर सकता है। यदि मैं संवाद मोडल करता हूं, ऐसा नहीं होता है, लेकिन स्विंग में मोडल का भी अर्थ है अवरुद्ध करता है, तो जिस क्षण मैं setVisible(true)
को कॉल करता हूं, थ्रेड ब्लॉक हमेशा के लिए।
तो मेरा वर्तमान "समाधान" एक कार्यकर्ता थ्रेड का उपयोग करना है, और उसके बाद एक अलग थ्रेड को दूर करना जिसका उद्देश्य केवल setVisible
की अवरुद्ध प्रकृति को अवशोषित करना है। निश्चित रूप से एक बेहतर समाधान होना चाहिए!
तो मैं एक संवाद कैसे प्राप्त करूं जो उपयोगकर्ता को शेष सिस्टम (मोडल) के साथ बातचीत करने से रोकता है लेकिन थ्रेड को अवरुद्ध नहीं करता है जो इसे दिखने का कारण बनता है?
भी देखें: http://stackoverflow.com/questions/3954120/swing-modal-dialog-refuses-to-close-sometimes ट्यूटोरियल में – Zarkonnen