2011-12-09 47 views

回答

2

這很大程度上取決於拋出的錯誤以及原因。

最好的辦法是仔細閱讀ActionScript文檔,並添加監聽到所有有錯誤的反應明確ErrorEvents(如IOErrorEventSecurityErrorEvent)。這些通常與網絡和/或文件訪問以及安全問題有關。

對於大多數其他錯誤,還有try {} catch() {} finally {}語句。 This tutorial可能是一個很好的開始。

如果一切都失敗了,就有UncaughtErrorEvent

但是你應該真的使用那個作爲最後的手段,而不是一個神奇的子彈 - 最好的錯誤處理是a)試圖防止首先拋出錯誤(確保所有變量都被正確初始化,測試null等),以及b)通過顯式地捕獲預期的運行時錯誤來處理預期的運行時錯誤,以保持應用程序的運行和穩定。

+0

什麼是選項,如果我使用Flex 3和空氣1.5,我不能使用UncaughtErrorEvent? – Adam

+0

不幸的是,不幸的是,UncaughtErrorEvent至少需要AIR 2或Flex 4.我不知道任何機制可以在全球範圍內捕獲錯誤。但是我所說的其他一切都是真實的,儘管如此:徹底防止錯誤發生,並在可能的情況下捕獲預期的錯誤。如果你的代碼寫得很好,不應該有任何未被捕獲的錯誤。 – weltraumpirat

0

你有幾個選項。如您所知,對於某些異步操作,異常處理並不總是可能的。

首先,您需要知道哪些對象負責導致錯誤的異步操作。最明智的方法是將必要的錯誤事件處理程序添加到此對象。

例如,URLLoader執行異步操作;而且它的失敗只能通過添加錯誤事件偵聽器來處理。例如:

var loader: URLLoader = new URLLoader(); 
loader.addEventListener(Event.COMPLETE, completeHandler); 
loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 

另一個「包羅萬象」選項是採取的Flash Player 10.1的新UncaughtErrorEvent功能advanage。爲此,您需要將未捕獲的錯誤處理程序附加到主應用程序的加載程序;這將抓住一切!例如:

loader.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, loaderErrorHandler); 

private function loaderErrorHandler(e:UncaughtErrorEvent):void { 
    if(event.error is Error) { 
    // handle error from embedded SWF 
    } 
    // suppress error dialog 
    e.preventDefault(); 
} 

最後的選擇可能不是最好的方法,因爲它促進異常而不是解決和妥善處理問題的吞嚥;但它在某些特殊情況下可能很有用(嵌入SWF)。

0

如果您運行標準版本的Flash Player,則不會顯示該窗口。

它只能表現爲對 瀏覽器插件的調試版本,一個對話框,獨立播放器,如在創作播放器的輸出 面板的消息,並作爲一個條目日誌文件爲 Adob​​e Flex Builder 3.它不會在版本 Flash Player或AIR版本中顯示。

來源:here

+0

......這並不意味着錯誤不會被拋出,也不表示程序不會崩潰。你只是不會看到窗口。 – weltraumpirat

+0

...是的。這就是亞當所問的。 – LoremIpsum

+0

......實際上,不:「所以我可以在我的應用程序中處理錯誤」。 – weltraumpirat