2012-05-25 14 views
6

मैं सूर्य जावा ट्यूटोरियल के माध्यम से कुछ पढ़ने कर रहा था, और मैं यह पृष्ठ यहाँ भर में आया था:यह जावा .execute() विधि कॉल का क्या अर्थ है?

: शीर्षक के अंतर्गत

How to Make an Applet

, "एप्लेट में धागे" मैं कोड के इस टुकड़े पाया

//Background task for loading images. 
    SwingWorker worker = (new SwingWorker<ImageIcon[], Object>() { 
      public ImageIcon[] doInBackground() { 
       final ImageIcon[] innerImgs = new ImageIcon[nimgs]; 
      ...//Load all the images... 
      return imgs; 
     } 
     public void done() { 
      //Remove the "Loading images" label. 
      animator.removeAll(); 
      loopslot = -1; 
      try { 
       imgs = get(); 
      } ...//Handle possible exceptions 
     } 

    }).execute(); 
} 

सबसे पहले मैं नया हूं, इसलिए मुझे खेद है कि यह एक बेवकूफ सवाल है। हालांकि मैंने कभी ".excecute()" के बारे में नहीं सुना है। मुझे यह समझ में नहीं आता है, और मैं Google से इसके बारे में कुछ भी नहीं ढूंढ पा रहा हूं। मैं इसे यहाँ देखता हूं ... एक अज्ञात आंतरिक वर्ग? (कृपया मुझे सही करें) और यह छवियों में लोड करने के लिए धागा शुरू कर रहा है। मैंने सोचा कि रन() विधि को कॉल() शुरू करने के लिए कॉल के साथ बुलाया जाता है? कृपया इस भ्रम को दूर करने में मेरी मदद करें।

+1

यहां ट्यूटोरियल है: http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html –

+0

http://docs.oracle.com/javase/6/docs/api/javax/swing /SwingWorker.html; http://docs.oracle.com/javase/tutorial/uiswing/concurrency/ –

उत्तर

7

executeSwingWorker का एक तरीका है। आप जो देख रहे हैं वह anonymous class तत्काल है और इसे execute विधि तुरंत कहा जाता है।

मैं स्वीकार करने के लिए मैं थोड़ा कि कोड को हैरान कर दिया हूँ है संकलित है, हालांकि, क्योंकि यह worker चर को execute का परिणाम बताए किया जा रहा है, और प्रलेखन हमें बताता है कि execute एक void कार्य है।

यदि हम उस कोड को थोड़ा सा डिस्टॉन्स्ट्रक्ट करते हैं, तो यह स्पष्ट हो सकता है। सबसे पहले, हम एक अनाम वर्ग SwingWorker विस्तार बनाने और इसे का एक उदाहरण बनाने के लिए, एक ही समय में (इस कोष्ठक में बड़ा सा है):

SwingWorker tmp = new SwingWorker<ImageIcon[], Object>() { 
    public ImageIcon[] doInBackground() { 
      final ImageIcon[] innerImgs = new ImageIcon[nimgs]; 
     ...//Load all the images... 
     return imgs; 
    } 
    public void done() { 
     //Remove the "Loading images" label. 
     animator.removeAll(); 
     loopslot = -1; 
     try { 
      imgs = get(); 
     } ...//Handle possible exceptions 
    } 

}; 

फिर हम execute फोन और (worker लिए परिणाम आवंटित जो बिट, मुझे लगता है कि है, संकलन चाहिए नहीं):

SwingWorker worker = tmp.execute(); 

अद्यतन: और वास्तव में, मैं इसे और यह doesn't compile की कोशिश की। तो महान उदाहरण कोड नहीं है। यह संकलन होगा:

SwingWorker worker = new SwingWorker<ImageIcon[], Object>() { 
    public ImageIcon[] doInBackground() { 
      final ImageIcon[] innerImgs = new ImageIcon[nimgs]; 
     ...//Load all the images... 
     return imgs; 
    } 
    public void done() { 
     //Remove the "Loading images" label. 
     animator.removeAll(); 
     loopslot = -1; 
     try { 
      imgs = get(); 
     } ...//Handle possible exceptions 
    } 

}; 
worker.execute(); 
+0

ओह, मुझे लगता है कि यह थ्रेड का उदाहरण नहीं है? खैर मैं अब मूर्खतापूर्ण महसूस करता हूँ। – yoonsi

+0

@yoonsi: मूर्खतापूर्ण महसूस करने की कोई आवश्यकता नहीं है, अज्ञात वर्ग मुश्किल हैं। 'स्विंगवर्कर' * संबंधित * धागे से संबंधित है, जिसमें यह स्विंग द्वारा प्रबंधित एक पृष्ठभूमि थ्रेड पर होने वाली कार्य को कतार में रखता है। –

1

.execute() एक अनाम वर्ग का एक उदाहरण पर विधि पर अमल बुला रहा है; यानी new SwingWorker<ImageIcon[], Object>(){...} द्वारा बनाई गई वस्तु। (यह एक वर्ग है जो SwingWorker वर्ग को बढ़ाता है।)

जावाडोक के अनुसार, execute विधि मौजूदा कार्यकर्ता थ्रेड पर निष्पादित करने के लिए उदाहरण द्वारा प्रस्तुत कार्य को शेड्यूल करता है। कार्यकर्ता धागे का जीवन चक्र (जैसे सृजन, प्रारंभ, इत्यादि) को स्विंग इंफ्रास्ट्रक्चर का ख्याल रखा जाता है।

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