3

Flex3のflash.media.Soundクラスで奇妙な動作が見られます。

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

しかし、これは役に立ちません。ストリームエラーが発生しましたが、実際にはSoundコンストラクターにあるように見えます。

エラー#2044:未処理のIOErrorEvent:。text = Error#2032:ストリームエラー。で... ]

FlexドキュメントでIOErrorEventのイベントリスナーを追加する例を1つ見ました。確かに、これを行う必要はなく、単にtry-catchを使用できますか?nullイベントリスナーを設定できますか?

4

3 に答える 3

5

IOError = ターゲット ファイルが見つかりません (または他の理由で読み取ることができません)。ファイルのパスを確認してください。

編集:これはあなたの問題ではないかもしれないことに気付きました.IOエラーをキャッチしようとしているだけですか?もしそうなら、あなたはこれを行うことができます:

var sound:Sound = new Sound();
sound.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
sound.load(new URLRequest("ディレクトリ/ファイル.mp3"));

function ioErrorHandler(event:IOErrorEvent):void {
    trace("IO エラーが発生しました");
}
于 2008-09-17T13:33:39.183 に答える
1

try ... catchは、その関数が呼び出されたときにスローされるエラーにのみ適用されます。ネットワークやディスクなどからの読み込みを伴うあらゆる種類のメソッドは非同期になります。つまり、呼び出すとすぐには実行されませんが、呼び出した直後に実行されます。その場合、エラーやイベントをキャッチしたり、ロードがいつ終了したかを知るために、addEventListenerが必要です。

于 2008-09-17T18:23:28.940 に答える
1

URLRequest は即時ではないため、リスナーを追加する必要があります。ディスクからロードする場合は非常に高速ですが、それでもイベント リスナーが必要です。livedocs に、これを設定する方法の良い例があります (IOErrorEvent 処理で完了)

于 2008-09-17T09:27:14.953 に答える