2012-01-08 10 views
8

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

Executors.newCachedThreadPool().execute(new Runnable() { 
        public void run() { 
         someTask();  
    }); 

किसी कारणों से व्याख्या कर सकते हैं क्यों एक SwingWorker बजाय ऊपर के उदाहरण का प्रयोग करेंगे?

SwingWorker worker = new SwingWorker() {    
protected Object doInBackground() { 
    someTask(); 
return null; 
} 
}; 
worker.execute(); 
+0

चेक [एपीआई] (http://docs.oracle.com/ जावेज/7/डॉक्स/एपीआई/जावैक्स/स्विंग/स्विंगवॉर्कर.html) और आप देखेंगे कि स्विंगवर्कर भविष्य इंटरफेस (और रननेबल) लागू करता है, जिसे एक्जिक्यूटर्स सर्विस की 'सबमिट (...)' विधि से वापस किया जाता है। स्विंग इवेंट थ्रेड के साथ अच्छी तरह से बातचीत करने के लिए एक स्विंगवर्कर बनाया गया है। –

उत्तर

7

1) SwingWorker पुल betweens Java Essentials Classes और औजार Future से घुमाओ, और काफी गारंटी नहीं है कि तरीकों process, publish से outoput और done पर EventDispatchThread

2) आप Executor से SwingWorker आह्वान कर सकते हैं हो सकता है के रूप में बनाया गया है, यह वह जगह है सबसे सुरक्षित तरीका कैसे multithreading in Swing को SwingWorker

3) संख्या या धागे के साथ ध्यान से ध्यान दें, क्योंकि Executor किसी परवाह नहीं करता है डब्ल्यू SwingWorkers के बारे में life_cycle

4) SwingWorker से एक और महत्वपूर्ण notice और here

5) राज्यों सुनने के लिए लागू करता है करने के लिए है PropertyChangeListener

5

SwingWorker अतिरिक्त तरीकों process() और done() जो स्वचालित रूप से घटना प्रेषण सूत्र में क्रियान्वित कर रहे हैं है: इस तरह से मैं वर्तमान में SwingWorker का उपयोग कर रहा है। यदि आप उपयोगकर्ता इंटरफ़ेस में अपनी प्रगति या अंतिम परिणाम प्रदर्शित करने की योजना बनाते हैं तो यह आसान होता है।

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