Я наблюдаю странное поведение класса flash.media.Sound во Flex 3.
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 не мгновенный. Это будет очень быстро, если вы загружаетесь с диска, но вам все равно понадобится Event-listener. Есть хороший пример того, как это настроить (с обработкой IOErrorEvent) в Liveocs.
IOError = целевой файл не может быть найден (или по какой-либо другой причине не может быть прочитан). Проверьте путь к вашему файлу.
Обновлено: я только что понял, что это может быть не ваша проблема, вы просто пытаетесь поймать ошибку ввода-вывода? Если да, то вы можете сделать это:
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, чтобы улавливать любые ошибки или события или знать, когда он закончил загрузку.