4

アンドロイドでの e3roid シーンの作成中に発火したプロセス中に、完全にトラップしたい例外に遭遇し続けます。おそらく、ユーザーエクスペリエンスを奪う即時の対話ではなく、余暇に横断できるバック例外トラッカーを作成する必要があります.

W/dalvikvm( 9540): threadid=1: thread exiting with uncaught exception (group=0x2
aac87c8)
E/AndroidRuntime( 9540): FATAL EXCEPTION: main
E/AndroidRuntime( 9540): java.util.ConcurrentModificationException
E/AndroidRuntime( 9540):        at java.util.ArrayList$ArrayListIterator.next(Ar
rayList.java:573)

アプリ全体が例外ダイアログで停止します.. ConcurrentModificationException をグローバルスコープからトラップして、未知の状況が原因でそのようなイベントが発生した場合にアプリ全体が破棄されないようにしたいと考えています..

** 編集 **

onSceneTouchEvent 中にこのブロックが起動される間

try {


        postUpdate(new AddShapeImpl(scene, onX, onY));

    } finally {

    }

私はブロックを発射するのが速すぎるようです。私は物事を遅くする必要があります。

* ファローアップ *

私は問題を解決したように見えました..私はこれらの1つをしました...

if (    ballspawning == false)

                    try {
                        Log.v(DEBUG_TAG, "onSceneTouchEvent 1-1");  


                        addnewball(scene, onX, onY);



                        Log.v(DEBUG_TAG, "onSceneTouchEvent 1-2");
                    } finally {


                    }

ボールスポーン ブール値フラグを配置し、スポーン値を渡す 2 番目の手順を行った後、非常にゴールデンであることがわかります... フィールドを作成し、反復の最後に設定され、横方向の前にチェックされます。リストが発生します..フーフー!! 非常に甘いです!

グローバルトラッピングは本当に必要ありません..古き良きデバッグだけです。それでも、すべてのエラーのグローバル ハンドラを実装したいと考えています。TODO

私は再び同時エラーを発生させました..

スクリーンショット

デバッグ メッセージ

別の出来事

スクリーンショット4

ほぼ犯人絞り込み

ConcurrentModificationException をキャッチしようとしました

 void uncaughtException(Thread t,
            Throwable e){

     Log.v(DEBUG_TAG, "uncaughtException **********");
     Log.v(DEBUG_TAG,"thread " + t + "    Throwable" +  e.toString());      
    }

最後のスクリーンショットでわかるように、上記のメソッドは呼び出されません。

ConcurrentModificationException は、アプリをクラッシュさせて例外ダイアログを表示します。

** ファローアップ **

私が追加しました

public class LauncherActivity extends E3Activity implements UncaughtExceptionHandler ,FPSListener,SceneUpdateListener 

実行時に追加の実装されていないメソッド

@Override
public void uncaughtException(Thread t,Throwable e) {   

    Log.v(DEBUG_TAG, "uncaughtException **************");
     Log.v(DEBUG_TAG,"thread " + t + "    Throwable" +  e.toString());  


}

それでも例外トラップはありません...

私も追加しました

newThread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler(){

            @Override
            public void uncaughtException(Thread t, Throwable e) {

                Log.v(DEBUG_TAG,"***************   ERROR! An exception occurred in " + t.getName() + ". Cause: " + e.getMessage());
            }
            });

        newThread.start();

いいえ、まだトラップはありません...

ああ

フーフー!!

例外をキャッチしました!! スクリーン ショットをチェックしてください... !!!!! が表示されます。

http://img17.imageshack.us/img17/135/concurrentmodification.png

キャッチされた例外

Thx のおかげで、Java 例外処理の底にたどり着くのに苦労しました!!

優れたリソース

私は並行問題を

削除...

パブリック クラス LauncherActivity は E3Activity を拡張し、 UncaughtExceptionHandler 、FPSListener、SceneUpdateListener を実装します

私がオリジナルにしなければならなかったこと... UncaughtExceptionHandler 実装なし

ジョニー・リーによって非常に詳細に説明されたクラスを追加しました。blog.dimond.de/?p=63

本当に甘いもの。

4

2 に答える 2

2

使用Thread.setUncaughtExceptionHandler

これは、Thread.UncaughtExceptionHandler1つのメソッドのインターフェースであるas引数を取りますuncaughtException(Thread t, Throwable e)

ドキュメントから:

キャッチされない例外が原因でこのスレッドが突然終了したときに呼び出されるハンドラーを設定します。

ただし、言うまでもなく、ソースで例外を修正する方が明らかに優れています。;-)ただし、予期しないエラーが発生した場合にエラーレポートを送信するために、この構成を使用します。

于 2011-06-03T05:49:17.533 に答える
2

ConcurrentModificationException がまったく発生していないことを確認してください。

Collectionこれは、 aをそので反復しているときに発生する例外ですIterator。繰り返している間、コレクションを更新することはできません。これが発生するシナリオは次のとおりです。

List<Integer> intList = new ArrayList<Integer>();
for (int i=0; i < 100; ++i) {
    intList.add(i);
}

int addValue = 1000;
for (Integer i: intList) {
    if (i%10 == 0) {
        //get ready for ConcurrentModificationException...
        intList.add(++addValue);//this is bad, because we are iterating over intList.
    }
}

これにより、ConcurrentModificationException が発生します。これは、リストを反復処理し、その反復中にリストに追加しようとしているためです。

于 2011-06-03T05:54:52.840 に答える