开发者社区 问答 正文

java_lang_NullPointerException出现该怎么办?


问题分析:
试图对一个为null的对象执行成员函数、试图获取null对象的成员变量、试图获取null数组的长度、试图访问数组中某个空对象、抛出一个对象而实际未初始化为null时,此时会抛出NullPointerException异常。
解决方案:对可以预见为空的对象进行处理,对不可预知的对象判断是否是null,然后再访问内部成员变量或执行成员函数。
代码示例:


  1. 示例1:[backcolor=transparent] [backcolor=transparent]Exception[backcolor=transparent] [backcolor=transparent]in[backcolor=transparent] thread [backcolor=transparent]"main"[backcolor=transparent] java[backcolor=transparent].[backcolor=transparent]lang[backcolor=transparent].[backcolor=transparent]NullPointerException

解决方案:判断对象是否为null,不是null再执行对象成员函数。
  1. [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]String[backcolor=transparent][][backcolor=transparent] split[backcolor=transparent]([backcolor=transparent]String[backcolor=transparent] content[backcolor=transparent]){
  2. [backcolor=transparent]    [backcolor=transparent]if[backcolor=transparent]([backcolor=transparent]content[backcolor=transparent]!=[backcolor=transparent]null[backcolor=transparent]){
  3. [backcolor=transparent]        [backcolor=transparent]String[backcolor=transparent][][backcolor=transparent] result[backcolor=transparent]=[backcolor=transparent]content[backcolor=transparent].[backcolor=transparent]split[backcolor=transparent]([backcolor=transparent]"\\s+"[backcolor=transparent]);
  4. [backcolor=transparent]        [backcolor=transparent]return[backcolor=transparent] result[backcolor=transparent];
  5. [backcolor=transparent]    [backcolor=transparent]}
  6. [backcolor=transparent]    [backcolor=transparent]return[backcolor=transparent] [backcolor=transparent]null[backcolor=transparent];
  7. [backcolor=transparent]}

  1. 示例2:[backcolor=transparent]java[backcolor=transparent].[backcolor=transparent]lang[backcolor=transparent].[backcolor=transparent]NullPointerException
  2. [backcolor=transparent] at android[backcolor=transparent].[backcolor=transparent]webkit[backcolor=transparent].[backcolor=transparent]WebViewClassic$WebViewInputConnection[backcolor=transparent].[backcolor=transparent]setNewText[backcolor=transparent]([backcolor=transparent]WebViewClassic[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]587[backcolor=transparent])
  3. [backcolor=transparent] at android[backcolor=transparent].[backcolor=transparent]webkit[backcolor=transparent].[backcolor=transparent]WebViewClassic$WebViewInputConnection[backcolor=transparent].[backcolor=transparent]setComposingText[backcolor=transparent]([backcolor=transparent]WebViewClassic[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]327[backcolor=transparent])
  4. [backcolor=transparent] at android[backcolor=transparent].[backcolor=transparent]webkit[backcolor=transparent].[backcolor=transparent]WebViewClassic$WebViewInputConnection[backcolor=transparent].[backcolor=transparent]commitText[backcolor=transparent]([backcolor=transparent]WebViewClassic[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]343[backcolor=transparent])
  5. [backcolor=transparent] at com[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]internal[backcolor=transparent].[backcolor=transparent]view[backcolor=transparent].[backcolor=transparent]IInputConnectionWrapper[backcolor=transparent].[backcolor=transparent]executeMessage[backcolor=transparent]([backcolor=transparent]IInputConnectionWrapper[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]279[backcolor=transparent])
  6. [backcolor=transparent] at com[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]internal[backcolor=transparent].[backcolor=transparent]view[backcolor=transparent].[backcolor=transparent]IInputConnectionWrapper$MyHandler[backcolor=transparent].[backcolor=transparent]handleMessage[backcolor=transparent]([backcolor=transparent]IInputConnectionWrapper[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]77[backcolor=transparent])
  7. [backcolor=transparent] at android[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]Handler[backcolor=transparent].[backcolor=transparent]dispatchMessage[backcolor=transparent]([backcolor=transparent]Handler[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]107[backcolor=transparent])
  8. [backcolor=transparent] at android[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]Looper[backcolor=transparent].[backcolor=transparent]loop[backcolor=transparent]([backcolor=transparent]Looper[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]194[backcolor=transparent])
  9. [backcolor=transparent] at android[backcolor=transparent].[backcolor=transparent]app[backcolor=transparent].[backcolor=transparent]ActivityThread[backcolor=transparent].[backcolor=transparent]main[backcolor=transparent]([backcolor=transparent]ActivityThread[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]5391[backcolor=transparent])
  10. [backcolor=transparent] at java[backcolor=transparent].[backcolor=transparent]lang[backcolor=transparent].[backcolor=transparent]reflect[backcolor=transparent].[backcolor=transparent]Method[backcolor=transparent].[backcolor=transparent]invokeNative[backcolor=transparent]([backcolor=transparent]Native[backcolor=transparent] [backcolor=transparent]Method[backcolor=transparent])
  11. [backcolor=transparent] at java[backcolor=transparent].[backcolor=transparent]lang[backcolor=transparent].[backcolor=transparent]reflect[backcolor=transparent].[backcolor=transparent]Method[backcolor=transparent].[backcolor=transparent]invoke[backcolor=transparent]([backcolor=transparent]Method[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]525[backcolor=transparent])
  12. [backcolor=transparent] at com[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]internal[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]ZygoteInit$MethodAndArgsCaller[backcolor=transparent].[backcolor=transparent]run[backcolor=transparent]([backcolor=transparent]ZygoteInit[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]833[backcolor=transparent])
  13. [backcolor=transparent] at com[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]internal[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]ZygoteInit[backcolor=transparent].[backcolor=transparent]main[backcolor=transparent]([backcolor=transparent]ZygoteInit[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]600[backcolor=transparent])
  14. [backcolor=transparent] at dalvik[backcolor=transparent].[backcolor=transparent]system[backcolor=transparent].[backcolor=transparent]NativeStart[backcolor=transparent].[backcolor=transparent]main[backcolor=transparent]([backcolor=transparent]Native[backcolor=transparent] [backcolor=transparent]Method[backcolor=transparent])

在使用Google Play Services的google-play-services.jar时报错,建议设置全局Exception Handler。
  1. [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]class[backcolor=transparent] [backcolor=transparent]MyApplication[backcolor=transparent] [backcolor=transparent]extends[backcolor=transparent] [backcolor=transparent]Application[backcolor=transparent] [backcolor=transparent]{
  2. [backcolor=transparent]    [backcolor=transparent]@Override
  3. [backcolor=transparent]    [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]void[backcolor=transparent] onCreate[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]{
  4. [backcolor=transparent]        [backcolor=transparent]super[backcolor=transparent].[backcolor=transparent]onCreate[backcolor=transparent]();
  5. [backcolor=transparent]        [backcolor=transparent]Thread[backcolor=transparent].[backcolor=transparent]setDefaultUncaughtExceptionHandler[backcolor=transparent]([backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]Thread[backcolor=transparent].[backcolor=transparent]UncaughtExceptionHandler[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]{
  6. [backcolor=transparent]            [backcolor=transparent]@Override
  7. [backcolor=transparent]            [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]void[backcolor=transparent] uncaughtException[backcolor=transparent]([backcolor=transparent]Thread[backcolor=transparent] thread[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]final[backcolor=transparent] [backcolor=transparent]Throwable[backcolor=transparent] ex[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  8. [backcolor=transparent]                [backcolor=transparent]// Custom code here to handle the error.
  9. [backcolor=transparent]            [backcolor=transparent]}
  10. [backcolor=transparent]        [backcolor=transparent]});
  11. [backcolor=transparent]    [backcolor=transparent]}
  12. [backcolor=transparent]}

参考文献:

  1. https://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html

  2. http://stackoverflow.com/questions/21866459/android-nullpointerexception-on-webview

  3. https://groups.google.com/forum/#!topic/google-admob-ads-sdk/QvUhH5ZGIHQ

  4. http://stackoverflow.com/questions/18824076/how-to-catch-this-exception-in-android-webview“

展开
收起
猫饭先生 2017-10-25 10:41:04 1315 分享 版权
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: