2011-03-25 12 views
12

में पहुँचा जा सकता है:प्रकार का कोई enclosing उदाहरण मैं इस कोड है गुंजाइश

Thread thread = new Thread(null, vieworders, "MagentoBackground"); 
thread.start(); 
m_progressDialog = ProgressDialog.show(SoftwarePassionView.this, 
    "Please wait...", "Retrieving data...", true); 

इससे निम्नलिखित संकलन त्रुटि:

No enclosing Instance of the type SoftwarePassionView is accessible in scope

यह कैसे के कारण होता है और मैं इसे कैसे हल कर सकते हैं?

+5

में है वर्ग 'SoftwarePassionView' या इसके उप-वर्ग के अंदर इस कोड:

यहाँ एक उदाहरण है? – MByD

उत्तर

5

आप संलग्न कक्षा के लिए this प्राप्त करने का प्रयास कर रहे हैं, जो काम करेगा यदि आप अज्ञात वर्ग के अंदर थे, लेकिन मुझे लगता है कि यह मामला नहीं है।

कृपया पढ़ें http://mindprod.com/jgloss/this.html

11

अभिव्यक्ति SoftwarePassionView.this केवल समझ में आता है अगर उदाहरण के स्निपेट में कोड एक गैर स्थिर आंतरिक/नेस्टेड वर्ग में पाया जाता है, और संलग्न वर्गों में से एक SoftwarePassionView है। यह कहता है "मुझे SoftwarePassionViewउदाहरण संलग्न करें"।

यदि यह कोड उस संदर्भ में नहीं है, (जैसा कि संकलक त्रुटि इंगित करेगा), आपको अभिव्यक्ति को सामान्य चर नाम या विधि कॉल के साथ प्रतिस्थापित करने की आवश्यकता है जो SoftwarePassionView ऑब्जेक्ट का संदर्भ देता है।

public class SoftwarePassionView { 

    public class Inner { 
     ... 
     public void doIt() { 
      Thread thread = new Thread(null, vieworders, "MagentoBackground"); 
      thread.start(); 
      m_progressDialog = ProgressDialog.show(SoftwarePassionView.this, 
        "Please wait...", "Retrieving data...", true); 
     } 
    } 
} 
+0

मुझे ईमानदारी से यकीन नहीं है कि आप क्या कह रहे हैं। उदाहरण प्राप्त करना संभव होगा। और यह एक गैर स्थैतिक आंतरिक है। – Christian

4

आप बल्कि SoftwarePassionView तुलना में एक अलग वर्ग के अंदर अपने स्निपेट डालना चाहते हैं, आप पास कर सकते हैं:


रिकॉर्ड के लिए, यहाँ एक उदाहरण है जहां SoftwarePassionView.this एक संकलन त्रुटि नहीं होगा है अपने थ्रेड कन्स्ट्रक्टर में क्लास SoftwarePassionView का एक उदाहरण।

Class SoftwarePassionView { 
    .... 

    Thread thread = new something(SoftwarePassionView); 
    thread.start(); 
    ...... 
    } 

अन्य वर्ग

Class something extends Thread{ 
    SoftwarePassionView SPV; 
    something(SoftwarePassionView){ 
    super(null, vieworders, "MagentoBackground"); 
    this.SPV = SoftwarePassionView} 
    } 

    @Override 
public void run(){ 
    m_progressDialog = ProgressDialog.show(SPV, 
    "Please wait...", "Retrieving data...", true); 
    } 

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