ActionScript 3.0 中的錯誤處理程序
Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本
由於許多應用程式即使沒有建立錯誤處理邏輯還是可以執行,因此開發人員往往會延緩為應用程式建立錯誤處理程序。然而,如果沒有建立錯誤處理程序,應用程式可能會在發生非預期狀況時,拖慢執行速度或讓使用者遭遇挫折。ActionScript 2.0 具有 Error 類別,可以讓您在自訂函數中建立邏輯,擲回包含特定訊息的例外。由於錯誤處理是製作易於使用之應用程式的重要關鍵,因此 ActionScript 3.0 便納入更大的架構以捕捉錯誤。
ActionScript 3.0 錯誤處理元素
ActionScript 3.0 包含多種錯誤處理工具,其中包括:
Error 類別:ActionScript 3.0 包含範圍廣泛的 Error 類別,以擴充可能產生錯誤物件的狀況範疇。每種 Error 類別都能協助應用程式處理並回應特定的錯誤狀況,不論它們是與系統錯誤 (如 MemoryError 狀況)、編碼錯誤 (如 ArgumentError 狀況)、網路和通訊錯誤 (如 URIError 狀況) 或其它狀況有關。如需有關每個類別的詳細資訊,請參閱比較各種 Error 類別。
減少無訊息的失敗情況:在 Flash Player 較早的版本中,您必須明確使用 throw 陳述式,才會產生並回報錯誤。至於 Flash Player 9 以及更新的 Flash 執行階段,原生 ActionScript 方法和屬性會擲回執行階段錯誤。發生這些錯誤時,它們可以讓您更有效的處理這些例外,然後個別處理每個例外。
清除在除錯期間所顯示的錯誤訊息:當您使用 Flash 執行階段的除錯程式版本時,有問題的程式碼或狀況會產生完善的錯誤訊息,讓您輕鬆找出特定區段的程式碼失敗的原因。這些訊息會讓錯誤的修正變得更有效率。如需詳細資訊,請參閱使用 Flash 執行階段的除錯程式版本。
精確的錯誤可向使用者顯示明確的錯誤訊息。在先前的 Flash Player 版本中,FileReference.upload() 方法會在 upload() 呼叫失敗時,傳回 Boolean 值 false,指出可能發生五種錯誤的其中一種。如果您呼叫 ActionScript 3.0 的 upload() 方法時發生錯誤,有四種特定錯誤中可以協助您向使用者顯示更正確的錯誤訊息。
改良後的錯誤處理程序:許多常見狀況都會擲回明確的錯誤。例如,在 ActionScript 2.0 中,在 FileReference 物件遭到填入之前,name 屬性的值是 null (因此,在您能夠使用或顯示 name 屬性之前,請確實設定它的值,不可以是 null)。在 ActionScript 3.0 中,如果您嘗試在 name 屬性有值填入前加以存取,Flash Player 或 AIR 便會擲回 IllegalOperationError,通知您值尚未設定,而且您可以使用 try..catch..finally 區塊來處理此錯誤。如需詳細資訊,請參閱使用 try..catch..finally 陳述式。
不會對效能造成重大的影響。與 ActionScript 之前的版本相比,使用 try..catch..finally 區塊來處理錯誤只需要很少資源,或甚至不需要額外的資源。
ErrorEvent 類別可以讓您針對特定的非同步錯誤事件建立偵聽程式。如需詳細資訊,請參閱對錯誤事件和狀態做出回應。
錯誤處理策略
只要不遇到有問題的狀況,即使您未在程式碼中建立錯誤處理邏輯,應用程式還是可以順利執行。然而,如果您不主動處理錯誤,當應用程式遇到問題時,使用者將無從得知應用程式失敗的原因。
應用程式遇到問題時,有幾種不同的處理方式。下列清單摘要說明三種主要的錯誤處理選項:
使用 try..catch..finally 陳述式。這些陳述式會在發生同步錯誤時加以捕捉。您可以將陳述式巢狀化於階層架構中,以便在程式碼執行的不同層級捕捉例外。如需詳細資訊,請參閱使用 try..catch..finally 陳述式。
建立自己的自訂錯誤物件。您可以使用 Error 類別建立自己的自訂錯誤物件,以追蹤應用程式中,內建錯誤類型未涵蓋的特定作業。接著,便可以針對您的自訂錯誤物件,使用 try..catch..finally 陳述式。如需詳細資訊,請參閱建立自訂的錯誤類別。
寫入事件偵聽程式與處理常式以回應錯誤事件。您可以使用這個策略來建立全域錯誤處理常式,這樣在處理類似的事件時,就無須在 try..catch..finally 區塊中複製大量的程式碼。使用這個方法捕捉到非同步錯誤的機率也比較高。如需詳細資訊,請參閱對錯誤事件和狀態做出回應。