मैं एक ऐसा एप्लिकेशन लिख रहा हूं जो SwingWorker
का उपयोग करके अपने फ़ाइल मेनू क्रियाओं को निष्पादित करता है। प्रत्येक बुलाया गया विधि boolean
मान देता है जो बताता है कि ऑपरेशन सफलतापूर्वक निष्पादित किया गया था या नहीं।मैं एक व्यस्त प्रतीक्षा के बिना स्विंगवर्कर के परिणाम * कैसे पढ़ूं?
फिलहाल मैं परिणाम के लिए इंतजार व्यस्त उपयोग कर रहा हूँ, इस तरह:
public boolean executeOperation() {
final SwingWorker<Boolean, Void> worker = new SwingWorker<Boolean, Void>() {
@Override
protected Boolean doInBackground() throws Exception {
// ..
if (aborted) {
return false;
}
// ..
return true;
}
};
worker.execute();
// busy wait
while (!worker.isDone())
;
try {
return worker.get().booleanValue();
} catch (Exception e) {
// handle exceptions ..
return false;
}
}
वहाँ इस के हल के लिए एक कम मतदान तीव्र तरीका है?
worker.get()
का उपयोग करते हुए सीधे काम नहीं होगा, यह ब्लॉक EDT के रूप में, समाप्त करने के लिए काम के लिए इंतजार - यहां तक कि संवाद मैं SwingWorker
के भीतर से खोलने के अर्थ चित्रित नहीं होगा।
संपादित करें: यदि संभव हो, तो मैं विधि (या कार्यकर्ता) को अपने परिणाम को असंकालिक रूप से संवाद करने के लिए टालना चाहूंगा। मैं कई छोटी विधियों को कार्यान्वित कर रहा हूं (फ़ाइल -> खुला, नया, बंद करें, सहेजें, सहेजें, बाहर निकलें) जो एक-दूसरे पर भरोसा करते हैं (यानी जब बाहर निकलने का प्रयास किया जाता है, बंद कॉल से बाहर निकलें, बंद हो सकता है कॉल करें, सेव करें कॉल सेव करें जैसा)। यह असीमित रूप से हल करने से कोड अधिक जटिल हो जाता है।
आप हमेशा लूप में थ्रेड.sleep (100) डाल सकते हैं। –
यह इस तथ्य को नहीं बदलेगा कि आप परिणाम के लिए मतदान कर रहे हैं, ऑब्जेक्ट करने की ऑब्जेक्ट करने के बजाए यह होने पर आपको बताएगा। – mcfinnigan