2011-12-24 11 views
1

ConcurrentModificationExceptionがついていますが、コード内でどこで発生するのかわかりません。デバッグが私を与えることはすべて、このです:それを反復処理しているときにコレクションを変更しているときこのConcurrentModificationExceptionがクラッシュする場所を調べる方法は?

myApp [Android Application] 
DalvikVM[localhost:8631]  
    Thread [<1> main] (Suspended (exception ConcurrentModificationException)) 
     ViewRoot.draw(boolean) line: 1631 
     ViewRoot.performTraversals() line: 1329 
     ViewRoot.handleMessage(Message) line: 1944 
     ViewRoot(Handler).dispatchMessage(Message) line: 99 
     Looper.loop() line: 126 
     ActivityThread.main(String[]) line: 3997  
     Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
     Method.invoke(Object, Object...) line: 491 
     ZygoteInit$MethodAndArgsCaller.run() line: 841 
     ZygoteInit.main(String[]) line: 599 
     NativeStart.main(String[]) line: not available [native method] 
    Thread [<8> Binder Thread #2] (Running) 
    Thread [<7> Binder Thread #1] (Running) 
    Thread [<9> AsyncTask #1] (Running) 
    Thread [<10> AsyncTask #2] (Running)  
    Daemon Thread [<12> [email protected]@40770068] (Running) 
    Thread [<11> AsyncTask #3] (Running)  
+0

logcatには完全なスタックトレースが必要です。 eclipseで 'Window - > Show View - > Logcat'を使うか、SDKフォルダから' ddms'アプリを起動してください。クラッシュ後* AndroidRuntime *というタグ付きの大きな赤いブロックがあるはずです。 –

+0

Logcatが示すのは、isDEBUG/AndroidRuntime(899)の唯一のものです:>>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<大きなブロックなし... – michaelsmith

+0

ああ、ご迷惑をお忘れしました。デバッグモードになっているときに実行を再開しなければならず、例外時にデバッガが停止します。 「強制終了」ダイアログが表示されたら、logステートメントが表示されます。 –

答えて

0

ConcurrentModificationExceptionが発生します。現時点では、コレクションを変更しているforeachループを検索する方が簡単でしょう。

+0

私はやっている map.getOverlays()。add(...);別の場所で ロック/アンロックのヘルプですか? – michaelsmith

+0

@michaelsmith:もしあなたが別のスレッドからそれを変更していないので、foreachロックの中にあるなら助けにならないでしょう。 – Tudor

+0

私は実際には異なるスレッドからmodifを行います。だから、ロック/アンロックは問題ありませんか? – michaelsmith

関連する問題