为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这里不写sleep会在sendMessage这行报空指针错误?

05-19 09:37:34.193 1625-1625/com.geekband.handlerdemo01 E/AndroidRuntime: FATAL EXCEPTION: main

                                                                          Process: com.geekband.handlerdemo01, PID: 1625

                                                                          java.lang.RuntimeException: Unable to start activity ComponentInfo{com.geekband.handlerdemo01/com.geekband.handlerdemo01.SencondActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Handler.sendEmptyMessage(int)' on a null object reference

                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)

                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)

                                                                              at android.app.ActivityThread.-wrap11(ActivityThread.java)

                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)

                                                                              at android.os.Handler.dispatchMessage(Handler.java:102)

                                                                              at android.os.Looper.loop(Looper.java:148)

                                                                              at android.app.ActivityThread.main(ActivityThread.java:5417)

                                                                              at java.lang.reflect.Method.invoke(Native Method)

                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)

                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

                                                                           Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Handler.sendEmptyMessage(int)' on a null object reference

                                                                              at com.geekband.handlerdemo01.SencondActivity.onCreate(SencondActivity.java:51)

                                                                              at android.app.Activity.performCreate(Activity.java:6237)

                                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)

                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)

                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 

                                                                              at android.app.ActivityThread.-wrap11(ActivityThread.java) 

                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 

                                                                              at android.os.Handler.dispatchMessage(Handler.java:102) 

                                                                              at android.os.Looper.loop(Looper.java:148) 

                                                                              at android.app.ActivityThread.main(ActivityThread.java:5417) 

                                                                              at java.lang.reflect.Method.invoke(Native Method) 

                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 

                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 



上面是错误报告

正在回答

3 回答

Handler对象没有实例化吧

1 回复 有任何疑惑可以回复我~

注意到子线程中 handler一开始是没有实例化的 实例化在start()中进行,所以在执行thread.start()后,直接执行thread.handler.send...方法此时也许thread.start()中还未执行到给handler实例化的那一步,自然抛出异常,解决方法之二就是在thread中定义handler时候直接实例化 应该就没有问题了的


0 回复 有任何疑惑可以回复我~
#1

洋__

你只说对了一半,如果在thread定义的时候就实例化,那么thread还没有start,那么就没有Looper.prepare(),就没有looper对象,实例化handler会在构造方法就报错,睡眠就是为了保证实例化
2018-11-27 回复 有任何疑惑可以回复我~

加了sleep就成功执行了。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android面试常客Handler详解
  • 参与学习       54881    人
  • 解答问题       183    个

学Android开发,必学Handler,也是Android面试常客

进入课程

为什么这里不写sleep会在sendMessage这行报空指针错误?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信