使用 try..catch 和 try..catch..finally 语句

使用 try..catch..finally 代码块使您能够在 Flash 应用程序中加入错误处理。try..catch..finally 关键字允许您括起一个可能会发生错误的代码块,并对该错误作出响应。如果 try 代码块内的任何代码抛出了一个错误(使用 throw 语句),控制将传递给 catch 代码块(如果有)。然后,控制将传递给 finally 代码块(如果有)。无论是否有错误被抛出,可选的 finally 代码块都会执行。

如果 try 代码块内的代码未抛出错误(也就是说,try 代码块正常完成),则仍会执行 finally 代码块内的代码。

注意

即使 try 代码块使用 return 语句退出,finally 代码块仍会执行。

应使用以下格式编写 try..catchtry..catch..finally 语句:

// try-catch
try {
  // 语句
} catch (myError) {
  // 语句
}

// try-catch-finally
try {
  // 语句
} catch (myError) {
  // 语句
} finally {
  // 语句
}

无论何时代码抛出一个错误,您都可以编写自定义处理函数来适当地处理错误并执行相应的动作。您可能需要尝试从 Web 服务或文本文件加载外部数据,或向最终用户显示一条错误消息。还可以使用 catch 代码块尝试连接到可以提醒管理员出现了特定错误的 Web 服务,以便他/她可以确保应用程序正常工作。

在对一些数字执行除法运算之前使用 try..catch..finally 代码块进行数据验证:

  1. 选择"文件">"新建",然后选择"Flash 文档"。
  2. 选择时间轴上的第 1 帧,然后在"动作"面板中键入下面的 ActionScript:
    var n1:Number = 7;
    var n2:Number = 0;
    try {
        if (n2 == 0) {
            throw new Error("Unable to divide by zero");
        }
        trace(n1/n2);
    } catch (err:Error) {
        trace("ERROR! " + err.toString());
    } finally {
        delete n1;
        delete n2;
    }
    
  3. 选择"控制">"测试影片"来测试该文档。
  4. "输出"面板将显示 Unable to divide by zero
  5. 返回到创作环境并更改下面一行代码:
    var n2:Number = 0;
    

    更改为:

    var n2:Number = 2;
    
  6. 选择"控制">"Enter"来再次来测试该文档。

    如果 n2 的值等于 0,则将抛出一个错误,catch 代码块将捕获该错误,该错误会在"输出"面板中显示一条消息。如果 y 的值不等于 0,则"输出"面板中将显示 n1 除以 n2 的结果。无论是否出现错误,finally 代码块都会执行,并会从 Flash 文档中删除变量 n1n2 的值。

在错误发生时,除了可以抛出 Error 类的新实例外,您还可以扩展 Error 类来创建您自己的自定义错误,如下例所示。

创建自定义错误:

  1. 选择"文件">"新建",然后创建新的 ActionScript 文件。
  2. 选择"文件">"另存为",将该文件命名为 DivideByZeroException.as
  3. 在"脚本"窗格中键入下面的 ActionScript:
    // 在 DivideByZeroException.as 中:
    class DivideByZeroException extends Error {
       var message:String = "Divide By Zero error";
    }
    
  4. 保存该 ActionScript 文件。
  5. 在该 ActionScript 文件所在的相同目录下新建一个名为 exception_test.fla 的 Flash 文档,然后保存该文件。
  6. 在主时间轴的第 1 帧上,在"动作"面板中键入下面的 ActionScript:
    var n1:Number = 7;
    var n2:Number = 0;
    try {
        if (n2 == 0) {
            throw new DivideByZeroException();
        } else if (n2 < 0) {
            throw new Error("n2 cannot be less than zero");
        } else {
            trace(n1/n2);
        }
    } catch (err:DivideByZeroException) {
        trace(err.toString());
    } catch (err:Error) {
        trace("An unknown error occurred; " + err.toString());
    }
    
  7. 保存该 Flash 文档,然后选择"控制">"测试影片"来在测试环境中测试该文件。

    因为 n2 的值等于 0,Flash 抛出您的自定义 DivideByZeroException 错误类,并会在"输出"面板中显示 Divide By Zero error。如果在第二行中将 n2 的值从 0 更改为 -1,然后再次测试该 Flash 文档,您将看到"输出"面板中显示 An unknown error occurred; n2 cannot be less than zero。将 n2 的值设置为任何大于 0 的数字便可使"输出"面板中显示除法的结果。有关创建自定义类的详细信息,请参阅"类"