我看到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事件监听器吗?
答案 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以捕获任何错误或事件或知道何时完成加载。