2008-09-17 4 views
3

Ich sehe seltsames Verhalten mit der flash.media.Sound Klasse in Flex 3.Wie Fehler mit der Flex-Sound-Klasse

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

Dies ist jedoch nicht helfen, laden zu behandeln. Ich erhalte einen Stream-Fehler, der sich tatsächlich im Sound-Konstruktor befindet.

Fehler # 2044: Unbehandelt IOErrorEvent :. text = Fehler # 2032: Stromfehler. bei ...]

ich ein Beispiel in der Flex-Dokumentation sah, wo sie einen Ereignis-Listener für IOErrorEvent hinzufügen, SICHER muss ich nicht das tun, und kann einfach verwenden try-catch? Kann ich einen Null-Event-Listener setzen?

Antwort

5

IOError = Die Zieldatei kann nicht gefunden werden (oder aus einem anderen Grund nicht gelesen werden). Überprüfen Sie den Pfad Ihrer Datei.

Edit: Ich habe gerade festgestellt, dass dies nicht Ihr Problem sein kann, Sie versuchen nur, den IO-Fehler zu fangen? Wenn ja, können Sie dies tun:

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

Sie müssen einen Listener hinzufügen, da URLRequest nicht sofort erfolgt. Es wird sehr schnell sein, wenn Sie von der Festplatte laden, aber Sie werden immer noch den Event-Listener benötigen. Es gibt ein gutes Beispiel dafür, wie dies eingerichtet wird (abgeschlossen mit IOErrorEvent-Behandlung) in livedocs.

1

try ... catch gilt nur für Fehler, die ausgelöst werden, wenn diese Funktion aufgerufen wird. Jede Art von Methode, bei der Daten vom Netzwerk, der Festplatte usw. geladen werden, ist asynchron, dh sie wird nicht richtig ausgeführt, wenn Sie sie aufrufen, sondern stattdessen irgendwann kurz nachdem Sie sie aufgerufen haben. In diesem Fall benötigen Sie den addEventListener, um Fehler oder Ereignisse abzufangen oder zu wissen, wann das Laden beendet ist.