[英]Main objectives of java Runtime Exception and why they occur as well as the best practices for evasion of java runtime exception
[英]Best practices for trapping a unhandle runtime Exception for JAVA on the Android os?
在我在 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)
整個應用程序因異常對話框而死。我希望能夠從全局 scope 中捕獲 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 {
}
你會看到,在我放入一個生成球的 boolean 標志之后,我傳遞我的生成值的輔助程序是如此的黃金......我將它設置為一個字段,並在我的迭代結束時設置它並在橫向清單發生了..哇哦! 好甜蜜!
沒有真正需要全局陷阱..只是很好的舊調試。 但我仍然很想實現所有錯誤的全局處理程序。 去做
我再次爆發了並發錯誤..
截圖
我試圖用一個捕捉 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/concurrentmodificatione.png
感謝所有這一切讓我努力深入了解 java 異常處理!
我把並發問題困在了
刪除...
public class LauncherActivity 擴展 E3Activity 實現 UncaughtExceptionHandler,FPSListener,SceneUpdateListener
我必須原創......沒有 UncaughtExceptionHandler 實現
並添加了由 Johnny Lee 詳細介紹的 class。 blog.dimond.de/?p=63
真是甜蜜的東西。
使用Thread.setUncaughtExceptionHandler
:
它需要一個Thread.UncaughtExceptionHandler
作為參數,它是一種方法的接口: uncaughtException(Thread t, Throwable e)
。
從文檔中:
設置當此線程由於未捕獲的異常而突然終止時調用的處理程序。
然而,不用說,您顯然最好從源頭修復異常。 ;-) 然而,我確實使用這個構造我自己來發送錯誤報告,以防出現不可預見的錯誤。
我認為您寧願確保 ConcurrentModificationException 根本沒有發生。
當您使用其Iterator
迭代Collection
時,會出現異常。 在迭代時,您不能更新集合。 這是一個會出現的場景:
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,因為我們正在迭代一個列表並嘗試在迭代發生時添加到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.