我有这段代码:
Thread thread = new Thread(null, vieworders, "MagentoBackground");
thread.start();
m_progressDialog = ProgressDialog.show(SoftwarePassionView.this,
"Please wait...", "Retrieving data...", true);
这会产生以下编译错误:
在范围
中无法访问类型为SoftwarePassionView的封闭实例
这是如何引起的?如何解决?
答案 0 :(得分:11)
如果示例代码段中的代码在非静态内部/嵌套类中找到,并且其中一个封闭类为SoftwarePassionView.this
,则表达式SoftwarePassionView
才有意义。它说“给我封闭的SoftwarePassionView
实例”。
如果此代码不在该上下文中(如编译器错误所示),则需要将表达式替换为普通变量名称或方法调用,以提供对某些SoftwarePassionView
对象的引用。 / p>
对于记录,这是一个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);
}
}
}
答案 1 :(得分:5)
你试图获得封闭类的this
,如果你在一个匿名类中,这将有效,但我猜这不是这种情况。
答案 2 :(得分: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);
}
}