2013-02-13 26 views
7

मेरे पास एक स्विंग कार्यकर्ता है जो पृष्ठभूमि में गणना करता है, जबकि एक जेएफआरएएम में प्रगति को अद्यतन करता है।स्विंगवर्कर पूरा होने तक प्रतीक्षा कैसे करें?

मैं अपना मुख्य धागा doInBackground() को समाप्त करने के लिए कैसे कर सकता हूं?

मुझे पता है कि मैं चीजों को पूरा() विधि में डाल सकता हूं, लेकिन मैं सोच रहा था कि वास्तव में प्रोग्राम को प्रतीक्षा करने का कोई तरीका था (वह धागा, सही होना)।

कुछ मॉडेल जेडियलोग क्या करेगा के समान कुछ।

तो ...

SwingWorker a = new SwingWorker(); 
a.execute 

doOtherStuff(); 

doOtherStuff केवल doInBackground के बाद भाग गया है पूरा हो गया है, लेकिन SwingWorker की विधि से किया() में कहा विधि डाले बिना।

+0

एक SwingWorker एक "अतुल्यकालिक" आपरेशन का प्रतिनिधित्व करता है इंतज़ार कर रहे। इस प्रतिमान के साथ, "अगली" चीज को कॉलबैक में संभाला जाना चाहिए - अन्यथा, इसे एसिंक्रोनस इवेंट स्रोत के रूप में उपयोग करना थोड़ा खरीदता है। JDialogs भयानक हैक खुद को है .. कुछ ऐसा नहीं है जिसे मैं अनुकरण करने की कोशिश करता हूं। –

उत्तर

9

संक्षिप्त उत्तर है, हाँ।

SwingWorker#getdoInBackground विधि रिटर्न तक अवरुद्ध होगा।

लंबा उत्तर शायद, आप जो करना चाहते हैं वह नहीं है।

आप EDT और कॉल से SwingWorker लांच करता है तो SwingWorker#get आप EDT ब्लॉक, अपडेट जो तुम वापस कारण है कि आप SwingWorker उपयोग कर रहे हैं की ओर जाता है प्रसंस्करण से रोकता हो जाएगा।

इस मामले में, आपके पास दो विकल्प हैं। आप कॉलबैक इंटरफेस के साथ SwingWorker प्रदान कर सकते हैं, जो SwingWorker पूरा होने के बाद done से कॉल करने में सक्षम होगा। या फिर आप SwingWorker करने के लिए एक PropertyChangeListener देते हैं और state मूल्य की निगरानी कर सकता है, जब तक यह बराबर होती है StateValue.Done

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