2012-03-30 1 views
0

私はスレッドと混同しています。私はいくつかのスレッドを実行しており、いくつかのアクティビティでは新しいスレッドが作成され、クリーンアップされます。だから私がアプリケーションを終了しようとするとき、私はアボートを使用します。私はスレッドが閉じた罰金を実行しているかどうかをチェックしました。しかし、私は間違いを犯すと "... 11以上" ...任意のアイデア私は間違って何ですか?スレッドの実行を停止しようとするとアクティビティを破棄できません

public void run() { 
    while (abort_) { 
     //doeing stuff 
     } 
    } 


synchronized public void abort() { 
    abort_ = true; 
    if (ioio_ != null) { 
     ioio_.disconnect(); 
    } 
} 

メインは()デストロイです:

public void onDestroy() { 
    super.onDestroy(); 
    Start_settings.stopSetThread(); 
    bool = false; //stop screanThrea 
     if(ioio_thread_.isAlive()){ 
       ioio_thread_.abort(); 
     } 
} 

ので、onDestroy()メソッドは、そのthrouws呼び出されたときに:私は私の問題を解決し

W/dalvikvm(8672): threadid=1: thread exiting with uncaught exception (group=0x40018578) 



E/AndroidRuntime(8191): FATAL EXCEPTION: main 
E/AndroidRuntime(8191): java.lang.RuntimeException: Unable to destroy activity {android.io/android.io.Main}: java.lang.NullPointerException 
E/AndroidRuntime(8191):  at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2676) 
E/AndroidRuntime(8191):  at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2694) 
E/AndroidRuntime(8191):  at android.app.ActivityThread.access$2100(ActivityThread.java:117) 
E/AndroidRuntime(8191):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968) 
E/AndroidRuntime(8191):  at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(8191):  at android.os.Looper.loop(Looper.java:130) 
E/AndroidRuntime(8191):  at android.app.ActivityThread.main(ActivityThread.java:3687) 
E/AndroidRuntime(8191):  at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(8191):  at java.lang.reflect.Method.invoke(Method.java:507) 
E/AndroidRuntime(8191):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
E/AndroidRuntime(8191):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
E/AndroidRuntime(8191):  at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(8191): Caused by: java.lang.NullPointerException 
E/AndroidRuntime(8191):  at android.kvisio.Main.onDestroy(Main.java:364) 
E/AndroidRuntime(8191):  at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2663) 
E/AndroidRuntime(8191):  ... 11 more 

: は、私はラインを逃しUPDATEDスレッドが開始されたときにフラグを設定し、thread.isAlive()メソッドの代わりにフラグをチェックすることによって、しかし、私の質問は残っています: thread.isAlive()でスレッドを実行していないことをチェックすると、なぜこのような例外がスローされますか? お時間をいただきありがとうございます。

public void onDestroy() { 
    Start_settings.stopSetThread(); 
    bool = false; //stop screanThrea 
    if(!ioio_thread_.isAlive()){ 
      ioio_thread_.abort(); 
    } 
    super.onDestroy(); 
} 
+0

デバッグとあなたは私が 'の場合((ioio_thread_.isAlive()){ ioio_thread_.abort()はライン354上の364' –

+0

@LalitPoptaniライン'でnullを取得しているかどうか確認する。 } ' そして、この時点でioio_thread_は決して作成されません。 – Hia

+0

あなたのスレッドインスタンスがヌルであるように見える場合、' if(ioio_thread_!= null){....} ' –

答えて

1

私は同じエラーがありました。次の操作を行います

if(ioio_thread_ != null){ 
    if(ioio_thread_.isAlive()){ 
    // Do whatever 
} 
+0

あなたの時間。:) – Hia

0

正確に364行目の内容を見ると、どちらが表示されますか。それは決して定義されていないか、ある時点ではnullになります。

あなたのスレッドはnullです。このようなスレッドの存在と生存状態のテスト:

if(ioio_thread_ != null && ioio_thread_.isAlive()){ 
    // Do whatever (like aborting) 
} 
+0

私の謝罪私はコードをここで清掃していません..その唯一の 'if(ioio_thread_.isAlive()){ ioio_thread_.abort(); } ' – Hia

+0

一瞬..私はそれを試してみます。 – Hia

+1

質問自体のコードを更新する必要があります。 –

0

Start_settingsまたはioio_thread_のどちらかは、あなたが取得しているエラー与え、nullである:何について

+0

行364は 'ioio_thread_.isAliveスレッドがその時点で作成されていないか、すでに破棄されているので、既存のものを中止しないために、 'ioio_thread _!= null'または' ioio_thread_.isAlive() 'のエラーを起してエラーを発生させます。 – Hia

関連する問題