2012-05-03 66 views
5

我被困在約2小時的問題上,我認爲這很容易解決。 我正在爲android平臺構建自定義日期時間選擇器,並且由於標準java.util.Calendar和java.util.Date類的緩慢性,我決定使用JODA庫。 (原諒我...我來自COM和.NET程序集世界=)...),但我在互聯網上學習一些技巧,但顯然他們似乎是錯誤的... 這是我花了使用該庫在我的項目的步驟:使用JODA庫的Android java.lang.NoClassDefFoundError

  1. 下載最新的JODA庫2.1
  2. 創建「LIB」文件夾到我的項目文件夾
  3. 增加' joda-time-2.1.jar'到'lib'文件夾。
  4. 將'joda-time-2.1.jar'庫添加到構建路徑。
  5. 將'joda-time-2.1-javadoc.jar'和'joda-time-2.1-sources.jar'添加到'lib'文件夾中
  6. 將上述庫設置爲'java source attachchements'和'javadoc location '爲joda-time-2.1引用的庫。
  7. 在我的代碼中使用新庫(ehm ehm'intelli-sense'和編譯器不會引發任何錯誤或警告)
  8. 在真實或虛擬設備上啓動調試。

當涉及到以下行(使用JODA BTW第一個),調試停止:

DateTime newDate = new DateTime(2012, 5, 3, 12, 0, 0); 

,並返回下面的堆棧跟蹤:

05-03 19:09:14.349: E/AndroidRuntime(4071): java.lang.NoClassDefFoundError: org.joda.time.DateTime 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at it.paganel.droidMessageExport.Control.TimePickerControl.SetTimePart(TimePickerControl.java:83) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at it.paganel.droidMessageExport.Control.TimePickerControl.onClick(TimePickerControl.java:116) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at android.view.View.performClick(View.java:2454) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at android.view.View$PerformClick.run(View.java:9030) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at android.os.Handler.handleCallback(Handler.java:587) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at android.os.Handler.dispatchMessage(Handler.java:92) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at android.os.Looper.loop(Looper.java:123) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at android.app.ActivityThread.main(ActivityThread.java:4641) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:870) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at dalvik.system.NativeStart.main(Native Method) 
05-03 19:09:14.349: E/AndroidRuntime(4071): Caused by: java.lang.ClassNotFoundException: org.joda.time.DateTime in loader dalvik.system.PathClassLoader[/data/app/it.paganel.droidMessageExport-2.apk] 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at java.lang.ClassLoader.loadClass(ClassLoader.java:573) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at java.lang.ClassLoader.loadClass(ClassLoader.java:532) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  ... 13 more 

有人能夠幫助我? 在此先感謝!

+0

什麼是您用於DateTime的導入語句? – Sam

+0

我在另一臺計算機上打開我的項目時遇到了同樣的問題,Eclipse針對庫進行了編譯,但它在第一次調用JodaTime庫DateTime構造函數時崩潰。 – Luke

回答

7

將lib文件夾重命名爲libs。從ADT Tools 17開始,外部jar只有打包到apk文件夾中。 或者,你可以去「配置構建路徑..」 - >「訂單和導出」,然後點擊jar旁邊的複選框。

+0

是的,我明白了!我錯誤的文件夾名稱...重命名它「libs」而不是「lib」它工作得很好!但是當我使用DateTime()構造函數時,我注意到了一個很大的緩慢。例如,要創建一個新的DateTime對象,使用O2Droid移植(基於Froyo發行版)的Samsung Omnia 2需要大約30秒。我的宏碁A500平板電腦與蜂窩,需要約3秒...這是正常的?這個問題可以和我用來引用JAR的方法相關嗎?任何人都知道一些技巧來加速這個圖書館的表現? – GiveEmTheBoot

+0

您可能想檢查此討論以獲取有關緩慢啓動的幫助:http://stackoverflow.com/questions/5059663/android-java-joda-date-is-slow – sdouglass

1

對於其他人誰可能是尋找一個解決方案,還有另一種可能的原因,我才發現:打開項目>屬性> Java構建路徑>庫並檢查是否JodaTime正在Android的依賴的Android專用圖書館。然後確保在訂單和導出選項卡上選中相應的選項。我必須檢查Android私有庫(其中JodaTime已列出)以使其正常工作。

我認爲這也適用於類似的問題,並不一定與JodaTime相關。

相關問題