如何使用Flex Sound类处理加载错误

时间:2008-09-17 07:42:18

标签: flex flash actionscript-3

我看到Flex 3中的flash.media.Sound类出现了奇怪的行为。

var sound:Sound = new Sound();
try{
sound.load(new URLRequest("directory/file.mp3"))
} catch(e:IOError){
 ...
}

然而,这没有帮助。我收到了一个流错误,它实际上看起来是在Sound构造函数中。

  

错误#2044:未处理的IOErrorEvent:。   text =错误#2032:流错误。在...]

我在Flex文档中看到了一个示例,它们为IOErrorEvent添加了一个事件监听器,SURELY我不必这样做,并且可以简单地使用try-catch?我可以设置null事件监听器吗?

3 个答案:

答案 0 :(得分:5)

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");
}

答案 1 :(得分:1)

您需要添加一个侦听器,因为URLRequest不是即时的。如果您从磁盘加载,它将非常快,但您仍然需要事件监听器。 有一个很好的例子说明如何在livedocs中设置它(完成IOErrorEvent处理)。

答案 2 :(得分:1)

try ... catch仅适用于调用该函数时引发的错误。任何涉及从网络,磁盘等加载东西的方法都是异步的,即它在你调用它时不能正确执行,而是在你调用它之后不久发生。在这种情况下,您需要addEventListener以捕获任何错误或事件或知道何时完成加载。