我对我制作的主题感到困惑。我有几个线程正在运行,一些活动创建并清理一个新线程。所以现在当我尝试退出应用程序时,我使用aboart。我检查/当线程正在运行其关闭罚款。但是当我没有得到错误和“...... 11更多”......任何想法我做错了什么?
public void run() {
while (abort_) {
//doeing stuff
}
}
synchronized public void abort() {
abort_ = true;
if (ioio_ != null) {
ioio_.disconnect();
}
}
当Main()被破坏时:
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
我通过在启动线程时放置标志并检查标志而不是thread.isAlive()方法来解决我的问题。但我的问题仍然是: 为什么当我检查没有使用thread.isAlive()运行线程时,它会抛出这种异常? 谢谢你的时间。
答案 0 :(得分:1)
我遇到了同样的错误。执行以下操作:
if(ioio_thread_ != null){
if(ioio_thread_.isAlive()){
// Do whatever
}
答案 1 :(得分:0)
怎么样:
public void onDestroy() {
Start_settings.stopSetThread();
bool = false; //stop screanThrea
if(!ioio_thread_.isAlive()){
ioio_thread_.abort();
}
super.onDestroy();
}
答案 2 :(得分:0)
如果您遇到错误,Start_settings
或ioio_thread_
为空。
如果你精确了第364行的内容,你会看到哪一行。它永远不会定义,或者在某些时候为null。
有可能你的线程为空。测试线程的存在和活动状态,如下所示:
if(ioio_thread_ != null && ioio_thread_.isAlive()){
// Do whatever (like aborting)
}