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
區塊中複製大量的程式碼。使用這個方法捕捉到非同步錯誤的機率也比較高。如需詳細資訊,請參閱
對錯誤事件和狀態做出回應
。
|
|
|