【问题标题】:try-catch not working?尝试捕捉不起作用?
【发布时间】:2009-04-01 09:59:29
【问题描述】:

我在以下 Actionscript 3 代码中使用了 try-catch 块:

try {
    this._subtitle = new SubtitleController(subtitlePath, _framerate);
    this._subtitle.addEventListener(Event.COMPLETE, subtitleLoaded);
}
catch (e:Error) {
    trace('subtitle not found');
}

SubtitleController 构造函数然后尝试加载subtitlePath 并抛出Error #2044: Unhandled ioError,但try 语句没有捕获到错误。错误只是像没有 try 语句一样被抛出。

当然,我可以用

替换该代码
this._subtitle.addEventListener(IOErrorEvent.IO_ERROR, function (ev:Event) { trace('subtitle not loaded'); });
this._subtitle = new SubtitleController(subtitlePath, _framerate);
this._subtitle.addEventListener(Event.COMPLETE, subtitleLoaded);

它几乎可以工作,它停止抛出该错误,而是抛出另一个错误。

try-catch 块的全部意义不在于这样做吗?为什么它不能与try-catch 一起使用,但它可以与常规事件侦听器一起使用?

【问题讨论】:

  • 你可能不走运,adobe 制作的动作脚本库真的很丑,多种类型的“事件处理程序”模式和异常似乎非常固定.. 异常/错误似乎经常广播事件与原始调用。

标签: flash actionscript-3 error-handling try-catch


【解决方案1】:

IOErrors/NetworkErrors 是异步错误。当导致它们的方法被称为正常运行时错误时,它们不会被抛出。否则执行将不得不完全停止,直到(例如)一个文件被完全加载......

【讨论】:

  • 啊.. 现在说得通了。所以对于任何其他错误,除了 i/o 和网络错误,它应该可以工作,对吧?
【解决方案2】:

基本上,由于调用是异步的 try..catch..finally 阻止不会做你 豆子有点好。需要一段时间 加载程序确定 url 是 坏了,然后它派出 IO_ERROR 事件。 -http://www.mattmaher.net/flexible_code/index.php/2008/01/10/urlloader-stream-error-handling/

Theo 是正确的;我只想添加使用flash.events 包的IOErrorEvent 类来为不知道该方法的任何人处理此问题。

var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("test.mp3"));
loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
function onIOError(e:IOErrorEvent):void
{
    trace("An IO Error has occured.\n\n", e);
}

如果您使用的是 Loader 对象而不是 URLLoader,请记住您需要监听 Loader 对象的 contentLoaderInfo 属性,如下所示。

var loader:Loader = new Loader();
addChild(loader);

loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
loader.load(new URLRequest("path/to/asset"));

function onIOError(e:IOErrorEvent):void
{
    trace("An IO Error has occured.\n\n", e);
}

【讨论】:

    【解决方案3】:

    今天我发现有一个名为 log.as 的类是个坏主意。 此类抛出的错误不会在 try-catch 中捕获。

    我认为他们以前很好。 我一直在将 FlexUnit 与预期错误的单元测试一起使用。 我安装了 AIR SDK 2.7,最近添加了可能引发冲突的 AIR SDK 2.01(用于另一个项目)。

    可能是旧版 SDK 的一个极端案例或与我的构建环境有关的特定情况。

    重命名课程为我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2018-03-25
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 2011-02-12
      • 1970-01-01
      相关资源
      最近更新 更多