在我的应用程序的某些点,我有一个 try-catch 块,例如:这发生在不在显示列表中的类(不是Sprites,也不是任何类型的DisplayObject),而是扩展EventDispatcher。这些类驻留在外部加载的 SWF 中(以防万一)。
try {
... some logic that may throw Error
} catch (e:Error) {
var errorEvent:ErrorEvent = new ErrorEvent(ErrorEvent.ERROR, true);
errorEvent.text = e.getStackTrace();
dispatchEvent(errorEvent);
}
在根类中,这就是我所拥有的:
loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtErrorHandler);
loaderInfo.uncaughtErrorEvents.addEventListener(ErrorEvent.ERROR, onErrorEventHandler);
stage.addEventListener(ErrorEvent.ERROR, onErrorEventHandler);
protected function onUncaughtErrorHandler(event:UncaughtErrorEvent):void
{
var message:String;
if (event.error is Error) {
message = event.error.getStackTrace();
} else if (event.error is ErrorEvent) {
message = ErrorEvent(event.error).text;
} else {
message = event.error.toString();
}
trace(message);
}
protected function onErrorEventHandler(event:ErrorEvent):void
{
trace(event.text);
}
两个处理程序都没有被调用,但是这些错误事件会冒泡,我在控制台中看到它们,并且在调试模式下作为弹出窗口,但是我如何在根类中收听它们?
我这样做是因为我不希望错误中断主线程或特定业务逻辑的执行。