2008-09-17 7 views
3

je vois un comportement étrange avec la classe flash.media.Sound dans Flex 3.Comment gérer les erreurs de chargement avec le Flex classe Sound

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

Cependant, cela ne contribue pas. J'obtiens une erreur de flux, et il voit réellement dans le constructeur de son.

Erreur n ° 2044: non géré IOErrorEvent :. text = Erreur # 2032: Erreur de flux. à ...]

j'ai vu un exemple dans les Flex docs où ils ajoutent un écouteur d'événement pour IOErrorEvent: Oui, je ne dois pas le faire, et peut simplement utiliser try-catch? Puis-je définir un écouteur d'événement null?

Répondre

5

IOError = le fichier cible est introuvable (ou ne peut pas être lu pour toute autre raison). Vérifiez le chemin de votre fichier. Edit: Je viens de réaliser que ce n'est peut-être pas votre problème, vous essayez juste d'attraper l'erreur IO? Si oui, vous pouvez le faire:

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

Vous devrez ajouter un écouteur puisque l'URLRequest n'est pas instantanée. Ce sera très rapide si vous chargez à partir du disque, mais vous aurez toujours besoin de l'écouteur d'événements. Voici un bon exemple de configuration (Complète avec la gestion de IOErrorEvent) dans le livedocs.

1

try ... catch ne s'applique qu'aux erreurs qui sont lancées lorsque cette fonction est appelée. Tout type de méthode impliquant le chargement de matériel à partir du réseau, du disque, etc. sera asynchrone, c'est-à-dire qu'il ne s'exécute pas correctement lorsque vous l'appelez, mais il se produit peu de temps après l'appel. Dans ce cas, vous avez besoin de l'addEventListener afin d'attraper les erreurs ou les événements ou de savoir quand le chargement est terminé.

Questions connexes