2010-11-02 4 views
5

हमारा स्विंग एप्लिकेशन उत्कृष्ट स्विंगवर्कर वर्ग का उपयोग करके पृष्ठभूमि थ्रेड में कुछ लंबे समय तक चलने वाले कार्यों को निष्पादित करता है। हालांकि, बहुत सारे पुराने मैक केवल जावा 5 का समर्थन करते हैं, इसलिए हम अपने आवेदन को 6 के बजाय 5 के रूप में संकलित करना चाहते हैं। क्योंकि स्विंगवर्कर जावा 6 में पेश किया गया था, अब हम इसका उपयोग नहीं कर सकते हैं।जावा 5 स्विंगवर्कर प्रतिस्थापन

क्या मुझे केवल स्वीकार्य प्रतिस्थापन होना चाहिए यदि मुझे केवल पृष्ठभूमि में कुछ करने की आवश्यकता है और फिर इसे पूरा होने पर जीयूआई में संवाद करें? या मैं कुछ महत्वपूर्ण भूल रहा हूँ?

public static void wannabeSwingWorker(final Runnable doInBackground, final Runnable callback) { 
    Thread backgroundThread = new Thread(new Runnable() { 
     public void run() { 
      doInBackground.run(); 
      SwingUtilities.invokeLater(callback); 
     } 
    }); 
    backgroundThread.start(); 
} 

उत्तर

10

मैं अपने कोड की उपयुक्तता पर किसी और टिप्पणी दूँगा, लेकिन एक विकल्प के रूप में आप जावा 5 here में उपयोग के लिए Swingworker का बैकपोर्ट डाउनलोड कर सकते हैं।

+0

असल में, यह eppears कि यह स्विंगवर्कर का मूल कार्यान्वयन है, और सूर्य ने इसे मानक पुस्तकालय में पोर्ट किया। –

3

आपका कोड सही ढंग से काम करना चाहिए; निश्चित रूप से आप स्विंगवर्कर की सभी अन्य विशेषताओं को खो देंगे (आंशिक परिणाम और प्रगति लौट रहे हैं, रद्दीकरण योग्य, श्रोताओं का समर्थन कर रहे हैं),

1

यदि आपके उत्पाद में एलजीपीएल कोड के साथ कोई समस्या नहीं है, तो आप बैकपोर्ट का उपयोग कर सकते हैं जावा 5.

http://java.net/projects/swingworker

2

को SwingWorker के संस्करण Foxtrot पर एक नज़र है, जो सबसे घुमाओ संगामिति libs तुलना में अलग तरह से काम करता है ले लो।

लंबे समय से चलने वाले कार्य को निष्पादित करने के लिए पृष्ठभूमि थ्रेड को फायर करने के बजाय, यह स्विंग द्वारा किए गए दृष्टिकोण को अनुकरण करता है जब आप स्विंग ईडीटी पर लंबे समय तक चलने वाले कार्य को निष्पादित करके मोडल डायलॉग बॉक्स दिखाते हैं और हैंडल करने के लिए एक नया थ्रेड निकालते हैं जीयूआई घटनाओं।

एक लंबे समय तक चलने वाले कार्य के साथ काम करते समय जो आपको तुरंत कार्य करने की आवश्यकता होती है, परिणामस्वरूप प्रोग्राम कोड के एक बहुत ही अच्छे, प्रक्रियात्मक/गैर-समवर्ती दिखने वाले टुकड़े (जैसे JOptionPane.showConfirmDialog(...) से वापसी मूल्य की जांच करना) ।