當您在處理同步執行階段錯誤時,請使用
try..catch..finally
陳述式來捕捉錯誤。一旦發生執行階段錯誤,Flash Player 或 Adobe AIR 就會擲回例外。也就是說,Flash 執行階段會暫停正常的執行作業,並建立類型為 Error 的特殊物件。接著該 Error 物件會擲向第一個可用的
catch
區塊。
try
陳述式包含可能會造成錯誤的陳述式。使用
catch
陳述式時,請務必搭配
try
陳述式。如果在
try
陳述式區塊的其中一個陳述式內偵測到錯誤,就會執行附加到
try
陳述式的
catch
陳述式。
不管
try
區塊中是否發生錯誤,都會執行
finally
陳述式所包含的陳述式。如果沒有錯誤,
finally
區域中的陳述式就會在
try
區塊陳述式完成後執行。如果有錯誤,則會先執行適當的
catch
陳述式,接著再執行
finally
區塊中的陳述式。
下列程式碼將示範使用
try..catch..finally
陳述式的語法:
try
{
// some code that could throw an error
}
catch (err:Error)
{
// code to react to the error
}
finally
{
// Code that runs whether an error was thrown. This code can clean
// up after the error, or take steps to keep the application running.
}
每個
catch
陳述式都會識別它所處理的特定例外類型。
catch
陳述式可以指定只有 Error 類別之子類別的錯誤類別。每個
catch
陳述式都會依序檢查。只有符合所擲回之錯誤類型的第一個
catch
陳述式會執行。換句話說,假設您先檢查較高層級的 Error 類別,然後再檢查 Error 類別的子類別,只有較高層級的 Error 類別會符合。下列程式碼會說明這個觀點:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
上一段程式碼會顯示下列輸出:
<Error> I am an ArgumentError
若要正確捕捉 ArgumentError,請確認最明確的錯誤類型排在第一,接著再列出一般性的錯誤類型,如下列程式碼所示:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
ActionScript API 中的幾個方法和屬性如果在執行時遇到錯誤,則會擲回執行階段錯誤。例如,當 Sound 類別中的
close()
方法無法關閉聲音串流時,便會擲回 IOError,如下列程式碼所示:
var mySound:Sound = new Sound();
try
{
mySound.close();
}
catch (error:IOError)
{
// Error #2029: This URLStream object does not have an open stream.
}
當您更熟悉
適用於 Adobe Flash Platform 的 ActionScript 3.0 參考
之後,會注意到哪些方法會擲回例外,這些都會在每個方法的說明中詳述。