2008-09-17 31 views
3

加載我看到有flash.media.Sound類的奇怪行爲中的Flex 3如何處理錯誤使用Flex聲音

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

然而,這並沒有幫助。我收到一個流錯誤,它實際上看起來是在Sound構造函數中。

錯誤#2044:未處理的IOErrorEvent :. text =錯誤#2032:流錯誤。在...]

我看到Flex文檔中爲IOErrorEvent添加事件偵聽器的一個示例,其中我不必這樣做,並且可以簡單地使用try-catch?我可以設置一個空事件偵聽器嗎?

回答

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

由於URLRequest不是即時的,您將需要添加偵聽器。如果你從磁盤加載,它將會是非常快,但你仍然需要事件監聽器。 在livedocs中有一個很好的例子來說明如何設置它(完成IOErrorEvent處理)。

1

try ... catch只適用於調用該函數時引發的錯誤。任何一種涉及從網絡,磁盤等加載東西的方法都是異步的,也就是說,當你調用它的時候它不會正確執行,而是在你調用它之後不久就會發生。在這種情況下,您需要addEventListener以捕獲任何錯誤或事件,或知道它何時完成加載。