flex / air动作脚本错误的事件监听器

时间:2011-12-09 00:48:04

标签: actionscript-3 flex error-handling air event-listener

我正在尝试向我的空中应用程序添加一个事件监听器,以防止出现“ActionScript错误”窗口,因此我可以在应用程序中处理错误。

我找到了little information about this from adobe。我只是不确定我应该听什么。

3 个答案:

答案 0 :(得分:2)

这主要取决于抛出的错误以及原因。

您最好的选择是仔细阅读ActionScript文档并添加侦听器以对所有具有明确 ErrorEvents 的错误做出反应(例如IOErrorEvent和{{1 }})。这些通常与网络和/或文件访问以及安全问题有关。

对于大多数其他错误,都有SecurityErrorEvent个语句。 This tutorial可能是一个很好的起点。

如果一切都失败了,那就是UncaughtErrorEvent

但你真的应该使用那个作为最后的手段,而不是作为一个神奇的子弹 - 最好的错误处理是a)试图防止错误被抛出(确保所有变量都正确初始化,测试for null等)和b)通过显式捕获它们来处理预期的运行时错误,以保持应用程序的运行和稳定。

答案 1 :(得分:0)

你有几个选择。如您所知,对于某些异步操作,并不总是可以进行异常处理。

首先,您需要知道哪个对象负责导致错误的异步操作。最明智的方法是将必要的错误事件处理程序添加到此对象。

例如,URLLoader执行异步操作;它的失败只能通过添加错误事件侦听器来处理。例如:

var loader: URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, completeHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

另一个“全能”选项是优先考虑Flash Player 10.1的新UncaughtErrorEvent功能。为此,您需要将未捕获的错误处理程序附加到主应用程序的加载程序;这将抓住一切!例如:

loader.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, loaderErrorHandler);

private function loaderErrorHandler(e:UncaughtErrorEvent):void {
  if(event.error is Error) {
     // handle error from embedded SWF
  }
  // suppress error dialog
  e.preventDefault();
}

最后一个选项可能不是最好的方法,因为它可以促进吞噬异常,而不是正确地解决和处理问题;尽管如此,它在某些特殊情况下(嵌入SWF)会很有用。

答案 2 :(得分:0)

如果您运行的是Flash Player的标准版本,则不会显示该窗口。

  

它只会显示为调试器版本的对话框   浏览器插件和独立播放器,作为输出中的消息   创作播放器中的面板,以及日志文件中的条目   Adobe Flex Builder 3.它在发布中根本不会显示   Flash Player或AIR的版本。

来源:here