- 功能/含义
-
使用自定义的错误事件处理器(处理函数)、或本属性默认的操作针对未捕获的异常进行处理
- 类型
-
System类的成员属性(可读写)
- 说明
-
自定义未捕获的异常(指没有在外部程序被捕获的、直接传入吉里吉里本体的异常)的处理函数。
若不明确指定自定义的处理函数,系统则会自动执行默认的操作。
默认执行的操作如下:
- 停止异步事件的发送(将 System.eventDisabled 的属性值设为true)
- 开始输出错误日志(调用 Debug.logAsError 方法,输出错误日志)
- 显示错误通知对话框,并在脚本编辑器中显示出错代码的位置。
自定义处理函数的书写规范:
处理函数接收一个参数,这个参数为发生异常的对象。(一般写作 e 代表exception的含义。)
处理函数未指定、或是将属性值指定为 null 、又或者处理函数返回了 false 等这些情况下,程序都会将处理函数视为未定义,从而执行本属性默认操作。
处理函数返回 true 时,则不会执行上述的默认操作。
这里需要注意的是,程序在执行处理函数的过程中,某些与处理函数非同步执行的事件也许不会停止发生。这样一来,吉里吉里本体在处理这些异步事件的过程中就有可能再次遇到意料之外的异常。(也就是说,如果与错误处理函数在执行的过程中同时发生的异步事件本身存在问题的话,就会引发交叉错误)为了避免这种情况的发生,通常情况下会在处理函数内部事先排除异步事件发生的可能性。(即:利用 System.eventDisabled 属性,提前将事件发生功能冻结掉。)
例:
System.exceptionHandler = function (e)
{
// 当没有在任何一个外部程序中被捕获的异常被吉里吉里本体捕获时,
// 系统就会调用此函数。e 为记录异常的对象。
if(e instanceof "ConductorException")
{
// 如果错误信息在 Conductor.tjs 中定义过
Debug.logAsError(); // 输出错误日志文件
var event_disabled = System.eventDisabled; // 记录当前的运行状态
System.eventDisabled = true; // 冻结事件发送功能
// 在输出错误信息之前冻结发送功能,防止在错误输出时程序继续运行可能带来的麻烦。
System.inform(e.message); // 显示错误提示信息
System.eventDisabled = event_disabled; // 返回之前记录的运行状态
return true; // 返回 true 则不会执行属性默认的操作
}
else
{
return false; // 返回 false 则意味着错误信息未在 Conductor.tjs 中定义过,此时将执行属性默认的操作
}
};
- 相关参考
-
System.eventDisabled
Debug.logAsError