在我在android上的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 {
}
我认为我的速度太快了。我需要减慢速度。
*跟进*
我似乎解决了这个问题..我做了其中一个......
if ( ballspawning == false)
try {
Log.v(DEBUG_TAG, "onSceneTouchEvent 1-1");
addnewball(scene, onX, onY);
Log.v(DEBUG_TAG, "onSceneTouchEvent 1-2");
} finally {
}
你会看到我输入一个ballpawning布尔标志和一个辅助程序,我通过我的产卵值是如此的金色...我把它作为一个字段,它在我的迭代结束时设置并检查之前列表的横向发生.. whoo hoo !!好甜蜜!
没有真正需要全局陷阱..只是好老调试。但我仍然希望实现所有错误的全局处理程序。的 TODO
我再次爆发了并发错误..
截图
我试图用
捕获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
并在运行期间使用额外的Unimplimented方法
@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();
并且仍然没有诱捕......
唉唉
WHoo hoo !!
刚抓到异常!!看看屏幕截图......你会看到!!!!!!
http://img17.imageshack.us/img17/135/concurrentmodificatione.png
所有这些让我努力学习java异常处理的底部!
我通过
捕获了并发问题删除......
公共类LauncherActivity扩展E3Activity实现UncaughtExceptionHandler,FPSListener,SceneUpdateListener
我必须原创......没有UncaughtExceptionHandler实现
并添加了Johnny Lee非常详细的课程。 blog.dimond.de/?p=63
真的好吃的东西。
答案 0 :(得分:2)
使用Thread.setUncaughtExceptionHandler
:
它需要一个Thread.UncaughtExceptionHandler
作为参数,它是一个方法的接口:uncaughtException(Thread t, Throwable e)
。
来自文档:
设置当此线程因未捕获的异常而突然终止时调用的处理程序。
然而,毋庸置疑,您显然更善于在其来源修复例外情况。 ;-)但是我确实使用这个构造我自己发送错误报告,以防出现无法预料的错误。
答案 1 :(得分:2)
我认为你宁愿确保ConcurrentModificationException根本没有发生。
当您使用Collection
迭代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,因为我们正在迭代列表并尝试在迭代发生时添加它。