2011-03-25 20 views
12

erişilebilir:Hayır kapatan örneği Bu kodu vardır kapsamında

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

Bu verir aşağıdaki derleme hatası:

No enclosing Instance of the type SoftwarePassionView is accessible in scope

Bu nasıl kaynaklanır ve nasıl çözebilir?

+5

yılında

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

mi sınıfın 'SoftwarePassionView' veya onun alt sınıf içinde bu kodu: Burada

örneğidir? – MByD

cevap

5

Anonim bir sınıf içinde olsaydınız işe yarayacak olan kapsayıcı sınıf için this almaya çalışıyorsunuz, ama sanırım bu durum böyle değil.

örnek kod parçasında kod olmayan statik iç içe/iç sınıfta bulunan ve kapsayan sınıflardan biri SoftwarePassionView olduğu takdirde http://mindprod.com/jgloss/this.html

11

ifadesi SoftwarePassionView.this sadece mantıklı okuyunuz. "Bana SoftwarePassionViewörnek örnek vermek" diyor.

Bu kod bu bağlamda değilse, (derleyici hatasının göstereceği gibi), ifadeyi normal bir değişken adıyla veya bazı SoftwarePassionView nesnesine başvuru sağlayan yöntem çağrısı ile değiştirmeniz gerekir.

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

Ben dürüstçe ne söylediğinizden emin değilim. Örnek almak mümkün mü? ve bu statik olmayan bir iç. – Christian

4

Bunun yerine SoftwarePassionView farklı bir sınıfın içine Snippet'inizi koymak istiyorsanız, iletebilirsiniz: Kayıt için


, burada SoftwarePassionView.this bir derleme hatası olmaz bir örnektir thread yapıcınızdaki SoftwarePassionView sınıfının bir örneği. Diğer sınıfa

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); 
    } 

    }