2012-03-30 7 views
0

Ich bin etwas verwirrt mit Fäden i gemacht. Ich habe mehrere Threads ausgeführt, und einige Aktivitäten erstellen und bereinigen einen neuen Thread. Wenn ich jetzt versuche, die Anwendung zu beenden, benutze ich aboart. Ich habe überprüft,/wann der Thread läuft, ist geschlossen. Aber wenn nicht, bekomme ich Fehler und "... 11 mehr" ... irgendeine Idee, was mache ich falsch?derzeit keine Aktivität zerstören, wenn Stopp nicht versuchen Faden

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


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

Wenn Main() ist destroid:

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

so, wenn onDestroy() -Methode seine throuws genannt wird: AKTUALISIERT ich die Linie verpasst:

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 

ich mein Problem gelöst indem Sie Flags setzen, wenn der Thread gestartet wird, und die Flags anstelle der thread.isAlive() -Methode überprüfen. Aber meine Frage bleibt: Warum, wenn ich nicht Thread mit thread.isAlive() zu überprüfen, es löst diese Art von Ausnahmen? danke für deine zeit.

+0

Debug und prüfen Sie, was Sie bekommen null auf 'Linie 364' –

+0

@LalitPoptani on line 354 Ich habe' if ((ioio_thread_.isAlive()) { ioio_thread_.abort(); } ' Und an diesem Punkt wird nie ioio_thread_ erstellt – Hia

+0

scheint Ihre Thread-Instanz ist Null, setzen Sie ein Häkchen 'if (iioio_thread_! = Null) {....}' –

Antwort

1

Ich hatte den gleichen Fehler. Gehen Sie wie folgt:

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

ich es schon herausgefunden. Vielen Dank für deine Zeit.:) – Hia

0

was:

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

meine Entschuldigung i reinigen nicht den Code hier .. seine nur 'if (ioio_thread_.isAlive()) { ioio_thread_.abort(); } ' – Hia

+0

einen Moment .. Ich werde es versuchen. – Hia

+1

sollten Sie Ihren Code in der Frage selbst aktualisieren. –

0

Entweder Start_settings oder ioio_thread_ null ist, wird der Fehler gegeben Sie bekommen.

Wenn Sie genau der Inhalt der 364. Zeile, sehen Sie, welche. Es ist entweder nie definiert oder an irgendeinem Punkt null.

Die Chancen stehen gut Ihr Thread null ist. Testen Sie das Vorhandensein und den Status des Threads wie folgt:

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

bei Zeile 364 ist 'ioio_thread_.isAlive()' this Gewinde sind an diesem Punkt nie erstellt oder bereits zerstört. Also nicht nicht abbrechen bestehende ich versuchte Äther Möglichkeit zu überprüfen, 'ioio_thread _! = null' oder' ioio_thread_.isAlive() 'steigt diesen Fehler. – Hia

Verwandte Themen