如何使用Flex Sound类处理错误加载
时间:2020-03-05 18:58:13 来源:igfitidea点击:
我在Flex 3中看到flash.media.Sound类的奇怪行为。
var sound:Sound = new Sound(); try{ sound.load(new URLRequest("directory/file.mp3")) } catch(e:IOError){ ... }
但是,这没有帮助。我收到流错误,它实际上似乎在Sound构造函数中。
Error #2044: Unhandled IOErrorEvent:. text=Error #2032: Stream Error. at... ]
我在Flex文档中看到了一个示例,其中为IOErrorEvent添加了事件侦听器,当然我不必这样做,并且可以简单地使用try-catch吗?我可以设置一个空事件监听器吗?
解决方案
回答
由于URLRequest不是瞬时的,因此我们将需要添加一个侦听器。如果从磁盘加载,速度将会非常快,但是我们仍然需要事件监听器。
有一个很好的示例,说明如何在livedocs中进行设置(完成IOErrorEvent处理)。
回答
IOError =找不到目标文件(或者由于某些其他原因而无法读取)。检查文件的路径。
编辑:我只是意识到这可能不是问题,我们只是想捕获IO错误?如果是这样,我们可以执行以下操作:
var sound:Sound = new Sound(); sound.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); sound.load(new URLRequest("directory/file.mp3")); function ioErrorHandler(event:IOErrorEvent):void { trace("IO error occurred"); }
回答
try ... catch仅适用于调用该函数时引发的错误。涉及从网络,磁盘等中加载内容的任何一种方法都是异步的,也就是说,在我们调用它时不会立即执行,而是在调用后不久发生。在那种情况下,我们确实需要addEventListener来捕获任何错误或者事件或者知道何时完成加载。