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.
Debug und prüfen Sie, was Sie bekommen null auf 'Linie 364' –
@LalitPoptani on line 354 Ich habe' if ((ioio_thread_.isAlive()) { ioio_thread_.abort(); } ' Und an diesem Punkt wird nie ioio_thread_ erstellt – Hia
scheint Ihre Thread-Instanz ist Null, setzen Sie ein Häkchen 'if (iioio_thread_! = Null) {....}' –