jodatime を使用するのはこれが初めてで、修正方法がわからないスタックオーバーフロー エラーが発生しました。sqlite レコードが作成されてから今日までの日を表示できるようにする必要がある Android アプリを作成しています。私が知る限り、jodatime 以外はすべて正常に動作しています。プロジェクトのビルド時にこのエラーが発生しました
[2010-08-10 02:08:50 - Grow Journal Beta] org/joda/time/DateTimeUtils.class を処理しています... [2010-08-10 02:08:50 - Grow Journal Beta] org/joda/time/DateTimeZone$1.class を処理しています... [2010-08-10 02:08:50 - Grow Journal Beta] 警告: 関連する EnclosingMethod 属性を持たない匿名内部クラスの InnerClasses 属性を無視します。(このクラスは、壊れたコンパイラによって生成された可能性があります。) [2010-08-10 02:08:50 - Grow Journal Beta] org/joda/time/DateTimeZone$Stub.class を処理しています...
これはlogcatです:
08-13 22:12:11.823: エラー/AndroidRuntime(6537): キャッチされていないハンドラー: キャッチされていない例外が原因でスレッド メインが終了しました 08-13 22:12:11.893: エラー/AndroidRuntime (6537): java.lang.StackOverflowError 08-13 22:12:11.893: エラー/AndroidRuntime (6537): java.util.Hashtable.get (Hashtable.java:274) で 08-13 22:12:11.893: エラー/AndroidRuntime (6537): java.util.Properties.getProperty (Properties.java:177) で 08-13 22:12:11.893: エラー/AndroidRuntime (6537): java.lang.System.getProperty (System.java:440) で 08-13 22:12:11.893: エラー/AndroidRuntime (6537): java.lang.System.getProperty (System.java:412) で 08-13 22:12:11.893: エラー/AndroidRuntime (6537): org.joda.time.DateTimeZone.getDefault (DateTimeZone.java:132) で 08-13 22:12:11.893: エラー/AndroidRuntime (6537): org.joda.time.DateTimeZone.forID (DateTimeZone.java:190) で 08-13 22:12:11.893: エラー/AndroidRuntime (6537): org.joda.time.DateTimeZone.getDefault (DateTimeZone.java:132) で
少し調べた後、自分でjodatimeバイナリを再コンパイルする必要があるだけだと思います。私はEclipseを使用しており、新しいプロジェクトを作成し、jodatimeソースをインポートしました。コンパイルしようとすると、コンソールに次のように表示されます。
Usage: java org.joda.time.tz.ZoneInfoCompiler <options> <source files>
-src ソース ファイルを読み取る場所を指定します。 -dst 生成されたファイルを書き込む場所を指定します。
ここからどこへ行くべきかよくわかりません。どんな助けでも大歓迎です。御時間ありがとうございます。
オーバーフローからの StackTrace:
スレッド [メイン] (中断 (例外 StackOverflowError)) DateTimeZone.getDefault() 行: 147 ISOChronology.getInstance() 行: 86 DateTimeUtils.getChronology(年代学) 行: 231 DateConverter(AbstractConverter).getChronology(Object, Chronology) 行: 82 DateTime(BaseDateTime).(Object, Chronology) 行: 170 DateTime.(オブジェクト) 行: 168 PlantsCursorAdapter.newView(コンテキスト、カーソル、ViewGroup) 行: 71 PlantsCursorAdapter(CursorAdapter).getView(int, View, ViewGroup) 行: 182 ListView(AbsListView).obtainView(int) 行: 1274 ListView.measureHeightOfChildren(int, int, int, int, int) 行: 1147 ListView.onMeasure(int, int) 行: 1060 ListView(View).measure(int, int) 行: 7966 TableLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) 行: 3077 TableLayout(LinearLayout).measureChildBeforeLayout(View, int, int, int, int, int) 行: 888 TableLayout.measureChildBeforeLayout(View, int, int, int, int, int) 行: 453 TableLayout(LinearLayout).measureVertical(int, int) 行: 350 TableLayout.measureVertical(int, int) 行: 465 TableLayout.onMeasure(int, int) 行: 428 TableLayout(View).measure(int, int) 行: 7966 FrameLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) 行: 3077 FrameLayout.onMeasure(int, int) 行: 245 FrameLayout(View).measure(int, int) 行: 7966 LinearLayout.measureVertical(int, int) 行: 464 LinearLayout.onMeasure(int, int) 行: 278 LinearLayout(View).measure(int, int) 行: 7966 PhoneWindow$DecorView(ViewGroup).measureChildWithMargins(View, int, int, int, int) 行: 3077 PhoneWindow$DecorView(FrameLayout).onMeasure(int, int) 行: 245 PhoneWindow$DecorView(View).measure(int, int) 行: 7966 ViewRoot.performTraversals() 行: 767 ViewRoot.handleMessage(メッセージ) 行: 1650 ViewRoot(Handler).dispatchMessage(メッセージ) 行: 99 Looper.loop() 行: 123 ActivityThread.main(String[]) 行: 4595 Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) 行: 利用不可 [ネイティブメソッド] Method.invoke(Object, Object...) 行: 521 ZygoteInit$MethodAndArgsCaller.run() 行: 860 ZygoteInit.main(String[]) 行: 618 NativeStart.main(String[]) 行: 利用不可 [ネイティブメソッド]
DateTimeZone.class ソースはこちら