如何使用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来捕获任何错误或者事件或者知道何时完成加载。