2011-03-25 36 views
12

访问我有这样的代码:类型的无封闭情况下的范围是

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 2011-03-25 23:43:46

回答

11

表达SoftwarePassionView.this如果在示例代码段中的代码的非静态的内部/嵌套类被找到,和包围类之一是SoftwarePassionView才有意义。它说“给我附上SoftwarePassionView实例”。

如果此代码不在该上下文中(如编译器错误所示),则需要用普通变量名称或方法调用来替换该表达式,该方法调用可引用某个对象。


为了记录在案,这里是一个例子,其中SoftwarePassionView.this不会是一个编译错误:

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 2011-03-26 00:50:51

4

如果你想要把你的代码段不同的类,而不是SoftwarePassionView里面,你可以通过您的线程构造函数中的类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); 
    } 

    }