处理同步运行时错误时,可以使用
try..catch..finally
语句来捕获错误。当发生运行时错误时,Flash 运行时将引发异常,这意味着它将暂停正常的操作而创建一个 Error 类型的特殊对象。Error 对象随后会被引发到第一个可用的
catch
块。
try
语句将有可能产生错误的语句括在一起。
catch
语句应始终与
try
语句一起使用。如果在
try
语句块的其中一个语句中检测到错误,则将运行附加到该
try
语句的
catch
语句。
finally
语句中包含无论
try
块中是否出错均会运行的语句。如果没有错误,
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 参考
的逐渐熟悉,您会发现哪些方法会引发异常。详见每个方法的说明。