【问题标题】:Weird NullPointerException with Date object带有日期对象的奇怪 NullPointerException
【发布时间】:2011-02-12 12:48:06
【问题描述】:

我有一个用户的崩溃报告,我自己无法在我的测试设备上重新创建相同的错误。

这里是相关代码:

        for(File f : sessionDirectory.listFiles()){
        Date lastModDate = new Date(f.lastModified());
    /*Line 53*/ Session ss = new Session(lastModDate.toLocaleString() , f.getName()) ;
        sessionArrayList.add(ss ) ;
    }

这里是堆栈跟踪:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mydomain/com.mydomain.myActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803)
at android.app.ActivityThread.access$2300(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:144)
at android.app.ActivityThread.main(ActivityThread.java:4937)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.mydomain.myActivity.onCreate(myActivity.java:53)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751)

【问题讨论】:

    标签: java android date nullpointerexception


    【解决方案1】:

    我在java(不是android)中协调日期到/从字符串表示时看到了类似的事情,很长一段时间都不知道为什么。我不记得确切的细节,但它与不是线程安全的转换方法有关,这很奇怪,因为(如果我没记错的话)它发生在对静态 jdk 方法的调用中。

    尝试将 lastModDate.toLocaleString() 拉入同步方法并使用 DateFormat 实例时是否仍然发生。

    我找的时候jdk里已经有针对这个的bug文件了,但是被拒绝了。

    (也许 toLocaleString 使用了一个附加到当前语言环境的 DateFormat,它在所有线程之间共享,并调用了一个非线程安全的方法。)

    不过这只是一个猜测,但由于症状同样奇怪,请尝试一下。

    【讨论】:

    • 由于您无法重现错误,因此很难尝试上述建议是否有效... ;-)
    【解决方案2】:

    堆栈跟踪说:

    原因: java.lang.NullPointerException 在 com.mydomain.myActivity.onCreate(myActivity.java:53)

    第 53 行是什么?

    sessionDirectory 可以是nullsessionDirectory.listFiles() 可以返回null - 用户崩溃报告也提醒了这一点:-)

    【讨论】:

    • 第 53 行是:Session ss = new Session(lastModDate.toLocaleString() , f.getName()) ;
    • 我不怀疑 sessionDirectory.listFiles() 和 f 可以为空,因为第 52 行不会导致我在其中使用 f.lastModified() 的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2017-07-25
    • 2014-01-11
    • 2018-05-29
    • 1970-01-01
    相关资源
    最近更新 更多