Как обрабатывать ошибки загрузки с помощью класса Flex Sound

Я наблюдаю странное поведение класса flash.media.Sound во Flex 3.

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? Могу ли я установить прослушиватель нулевых событий?


person MidnightGun    schedule 17.09.2008    source источник


Ответы (3)


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");
}
person Antti    schedule 17.09.2008

Вам нужно будет добавить слушателя, поскольку URLRequest не мгновенный. Если вы загружаетесь с диска, это будет очень быстро, но вам все равно понадобится прослушиватель событий. Есть хороший пример того, как это настроить (с обработкой IOErrorEvent) в liveocs.

person grapefrukt    schedule 17.09.2008

try ... catch применяется только к ошибкам, которые возникают при вызове этой функции. Любой метод, который включает загрузку данных из сети, диска и т. Д., Будет асинхронным, то есть он не будет выполняться правильно, когда вы его вызываете, а вместо этого происходит вскоре после того, как вы его вызываете. В этом случае вам ОБЯЗАТЕЛЬНО нужен addEventListener, чтобы улавливать любые ошибки или события или знать, когда он закончил загрузку.

person davr    schedule 17.09.2008