2011-08-04 22 views
1

に私がスレッドからハンドラを呼び出す必要があり、私はこのスレッドからハンドラを呼び出すと、NullPointerExceptionが発生

new Thread(){ 
public void run(){ 
try{ 
Thread.sleep(2000); 
} 
catch(Exception ex){} 
actHandler.sendEmptyMessage(0); 
} 
}.start(); 

のようにやっていると私はこの

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

何をするのですか?

ありがとうございます。

+0

ハンドラを毎回正しく初期化してもよろしいですか? – Egor

+0

これを試してみてください。actHandler.sendEmptyMessage(0); – dhblah

+0

次に、handleを呼び出すにはどうすればいいですか?public void handleMessage(android.os.Message msg) – surendra

答えて

1

new Thread()ステートメントの後にactHandlerがインスタンス化されている可能性があります(可能な限り早く初期化することをお勧めします)。

actHandler = new Handler(); 

確認するコードをさらに表示してください。これはおそらくそうです。 messsageキューを処理ルーパーが、その後終了している場合は、あなたの場合は

Message msg = new Message(); 
msg.arg1 = int value; 
actHandler.sendMessage(msg); 

:あなたはスレッド宣言

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

actHandlerの初期化を今すぐ追加しました – surendra

+0

@surendra show私のすべてのあなたのコードをお願いします –

+0

私は今何をすべきか教えてください私のすべてのコードを入力しました – surendra

1

actHandlerはどこで初期化しますか?

別のスレッドにある場合は、その前に初期化が呼び出されていることを確認してください。

2

actHandlerを初期化している

SOLUTION

は、このようにしてみてください失敗を返します。

関連する問題