我需要从Thread
中调用Handler
,这是我的Thread
:
new Thread(){
public void run(){
try{
Thread.sleep(2000);
}
catch(Exception ex){}
actHandler.sendEmptyMessage(0);
}}.start();
我这样调用Handler
actHandler=new Handler(){
public void handleMessage(android.os.Message msg){
}
};
有时它工作得很好,有时它导致NullPointerException
在行actHandler.sendEmptyMessage(0);
下面是我的代码:
public class Casinos extends Activity {
ProgressDialog pd;
Handler actHandler;
@Override
public void onCreate(Bundle bundle){
super.onCreate(bundle);
pd=ProgressDialog.show(this,"","Please wait...");
new Thread(){
public void run(){
try{
Thread.sleep(2000);
}
catch(Exception ex){}
actHandler.sendEmptyMessage(0);
}}.start();
setContentView(R.layout.casinos);
actHandler = new Handler(){
public void handleMessage(android.os.Message msg){
super.handleMessage(msg);
pd.dismiss();
}};
}
}
该怎么办?
试试:
Message msg = new Message();
msg.arg1 = int value;
actHandler.sendMessage(msg);
在你的例子中,如果循环器处理消息队列正在退出,那么它将返回失败。
您可能在new Thread()
语句之后实例化了actHandler
。
actHandler = new Handler();
请给我们更多的代码来验证,但这可能是这种情况。
<<p> 解决方案/strong>在线程声明之后初始化了actHandler
public class Casinos extends Activity {
ProgressDialog pd;
Handler actHandler;
@Override
public void onCreate(Bundle bundle){
super.onCreate(bundle);
pd=ProgressDialog.show(this,"","Please wait...");
//move this HERE!!
actHandler=new Handler(){
public void handleMessage(android.os.Message msg)
{
super.handleMessage(msg);
pd.dismiss();
}
};
new Thread(){
public void run(){
try{
Thread.sleep(2000);
}
catch(Exception ex){}
actHandler.sendEmptyMessage(0);
}
}.start();
setContentView(R.layout.casinos);
}
}
您在哪里初始化您的actHandler
?
如果它在另一个线程中,请确保之前调用了初始化。(最好的方法可能是尽快初始化)