2010-10-04 18 views
8

मैं स्विंगवर्कर सबक्लास का उपयोग करने में सक्षम होना चाहता हूं बहु बार यह संभव है क्योंकि मैंने जावा दस्तावेज़ में पढ़ा है "स्विंगवर्कर को केवल एक बार निष्पादित करने के लिए डिज़ाइन किया गया है। एक स्विंगवर्कर को एक से अधिक बार निष्पादित करने से नतीजा नहीं होगा doInBackground विधि दो बार। "स्विंगवर्कर को कई बार निष्पादित करें

कोई विचार?

धन्यवाद एक वर्ग को लागू करने SwingWorker वास्तव में हो सकता है की

+1

क्या आपका मतलब है कि आप चाहते हैं अपने स्विंगवर्कर कार्यान्वयन वर्ग, या कक्षा के उदाहरण का पुन: उपयोग करें? – Qwerky

+0

मुझे नहीं पता शायद मुझे कुछ गलत मिला लेकिन जब मैं कार्यकर्ता उदाहरण बनाता हूं और execute() विधि को कॉल करता हूं तो कुछ भी निष्पादित नहीं होता है। हालांकि जब मैंने doInBackground() विधि को कॉल करने का प्रयास किया तो श्रमिकों ने –

उत्तर

8

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

+1

निष्पादित किया, एक सीमा है, तथ्य यह है कि कई ऑब्जेक्ट्स को कचरा इकट्ठा किया जाना चाहिए जिससे यह एक सीमा हो। छोटे ऐप्स के लिए इससे कोई फर्क नहीं पड़ता है, लेकिन अत्यधिक बड़े अनुप्रयोगों के लिए जिन्हें प्रदर्शन कारणों से कचरा प्राप्त करने वाली चीजों की संख्या को कम करने के लिए मजबूर किया जाता है, यह एक सीमा है। कह रहे हैं, सीधे बाहर, कि कोई सीमाएं सही नहीं हैं ... सिर्फ इसलिए कि यह हर किसी पर लागू नहीं होती है, यह कुछ भी नहीं बनाती है। – searchengine27

+0

क्या आपने कक्षा के लिमिता टिहोन को पढ़ा है? अगर एक बार एक से अधिक बार निष्पादित किया जाता है तो यह काम नहीं करेगा। कोई विकल्प नहीं है। और अगर स्मृति एक सीमा है तो शायद जावा सही समाधान नहीं है। इसलिए, यदि जावा का उपयोग किया जाता है और पर्याप्त स्मृति है तो कोई सीमा नहीं है। बड़े अनुप्रयोगों के लिए भी कोई समस्या नहीं है। उन्हें आंशिक कचरा संग्रह के लिए डिजाइन किया जाना है। चरम मामलों में एक विघटनकर्ता की तरह कुछ की आवश्यकता हो सकती है, लेकिन फिर यूआई को स्विंग –

+1

उम्म में निर्मित कोई समझ नहीं है ... एक विकल्प है। एक रननेबल, और एक 'निष्पादक सेवा' का एक उदाहरण है। यहां तक ​​कि 'स्विंगवर्कर' दस्तावेज में भी, यह कहता है कि एक सुविधा वर्ग है। आसानी से अन्य विकल्प हैं। 'स्विंगवर्कर' केवल तभी उचित होता है जब आप दूसरों के लिए कुछ चीजें छोड़ सकते हैं। – searchengine27

1

आप जितनी आवश्यकताएं चाहते हैं उन्हें तुरंत चालू नहीं कर सकते हैं और उन्हें निष्पादित नहीं कर सकते हैं। स्विंगवर्कर वर्ग में javax.swing.SwingWorker मौजूद है। MAX_WORKER_THREADS = 10. तो आप अधिकतम 10 उदाहरण निष्पादित कर सकते हैं। एक उदाहरण मुक्त होता है केवल निष्क्रिय समय में 10 मिनट खर्च करता है। एक थ्रेड इंस्टेंस के रूप में SwingWorker इंस्टेंस का उपयोग न करें; यह धागा नहीं है।

0

ऐसा करने का प्रयास करें:

private void startTask() {// main method that creates the background task or class that implements the SwingWorker 

    AppContext appContext = AppContext.getAppContext(); 
    if(appContext!=null){ 
     appContext.remove(SwingWorker.class); 
    } 
    MassiveMigrationTask task = new MassiveMigrationTask();// class that implements the SwingWorker 
    task.execute();// this process implicitly adds the SwingWorker.class to the appContext 
    } 

वर्णन है: "। AppContext ThreadGroup द्वारा संदर्भित एक मेज जो आवेदन सेवा उदाहरणों संग्रहीत करता है"

तो यह समस्या मूल रूप से हो रही है क्योंकि ऐपकॉन्टेक्स्ट स्विंगवर्कर नामक धागे का नाम सहेज रहा है ..., इसलिए यदि आप थ्रेड का एक और उदाहरण बनाने का प्रयास करते हैं तो आपको शायद कोई सफलता नहीं मिलेगी, क्योंकि यह उस थ्रेड नाम का मूल्यांकन करती है एक नया एक या कम से कम धागे के ढेर में नए डाल निष्पादित करने के लिए निष्पादित करने से पहले, नि: शुल्क यहाँ कोड परामर्श महसूस:

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/awt/AppContext.java

पुनश्च: महत्वपूर्ण: "आप एक आवेदन सेवा नहीं लिख रहे हैं, तो या नहीं पता कि कोई क्या है, कृपया इस वर्ग का उपयोग न करें "

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