当前位置:  开发笔记 > 编程语言 > 正文

Flex 3关闭UrlLoader抛出异常

如何解决《Flex3关闭UrlLoader抛出异常》经验,为你挑选了1个好方法。

我正在尝试使用UrlLoader模拟'HEAD'方法; 本质上,我只想检查文件是否存在而不下载整个文件.我想我只会使用HttpStatusEvent,但是当您在调试模式下运行时,以下代码会抛出异常(我无法在try/catch块中包装).



    



我尝试使用ProgressEvents,但似乎有些404页面返回内容,因此状态事件将正确识别页面是否存在.

有人有主意吗?



1> Juan Pablo C..:

我认为这是URLLoader类中的一个错误.

如果你看到错误信息(至少我得到的那个,你没有粘贴yorrs!)你会看到它:

错误:错误#2029:此URLStream对象没有在flash.net::URLLoader/onComplete()上的flash.net::URLStream/readBytes()打开的流:

这可以让您了解正在发生的事情.URLLoader类在内部使用URLStream对象,该对象提供对下载数据的低级访问.

该错误消息表明正在URLLoader上调用onComplete处理程序.该文件很大但它可能已缓存,因此加载速度相当快.现在,如果为进度和完成事件添加侦听器,您将看到触发事件的顺序是:

进展

状态

完成

该文档证实了这一点:

请注意,httpStatus事件(如果有)在任何完整或错误事件之前(以及除此之外)发送.

现在,您可以看到问题是来自您正在调用close()的状态处理程序.这会关闭流.但显然(我认为这是错误),URLLoader类的onComplete处理程序不会检查流是否打开.(从Actionscript中无法检查这一点,所以你必须在try/catch中包装代码).您无法从封闭流中读取数据,因此这就是它的原因.

我可以看到两种方法来解决这个问题:

1)推迟执行调用close()(你的卸载方法)的函数,这样在调用URLLoader内部onComplete方法调用close().

就是这样:

setTimeout(unload,1);

而不是这个:

unload();

2)使用URLStream而不是URLLoader.第一个选项让我觉得有点像一个黑客的解决方法,所以在你的情况下我会选择最后一个.通常,使用URLStream意味着更多的工作,但在这种情况下,您实际上并不想阅读任何数据,因此它没有太大的区别.另外,您只需在当前代码中更改两行:

这个:

private var _loader:URLStream;

还有这个:

_loader = new URLStream(); 

而且你们都准备好了.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有