2011-02-12 50 views
0

我有一個用戶的崩潰報告,我不能在我的測試設備上自己重新創建相同的錯誤。奇怪的NullPointerException與日期對象

下面是相關代碼:

 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) 

回答

1

我見過這樣的事情concerting日期時/從Java字符串表示(不是機器人)並且很長一段時間都不知道爲什麼。我不記得確切的細節,但它與轉換方法不是線程安全有關,這很奇怪,因爲(如果我沒記錯的話)它發生在一個靜態jdk方法的調用中。

嘗試當您將lastModDate.toLocaleString()拖入同步方法並使用DateFormat實例時仍然發生。

當我查找它時,在jdk中已經有一個反對這個bug的文件,但它被拒絕了。

(也許的toLocaleString使用連接到其所有線程之間共享當前地區的日期格式,並調用非線程的方法。)

然而這僅僅是猜測,但由於症狀類似怪異,只是試試看。

1

堆棧跟蹤說:

造成的: 顯示java.lang.NullPointerException在 com.mydomain.myActivity.onCreate(myActivity.java:53)

什麼是53行?

sessionDirectory可以nullsessionDirectory.listFiles()可以返回null - 也得到了用戶崩潰報告提醒說:-)

+0

是否爲null _f_可能? – extraneon 2011-02-12 13:06:52

+0

第53行是:`Session ss = new Session(lastModDate.toLocaleString(),f.getName());` – dirhem 2011-02-12 13:24:55