エラーイベントへの応答とステータス

ActionScript 3.0 のエラー処理で向上した最も重要な機能の 1 つは、非同期のランタイムエラーに応答するためのエラーイベント処理をサポートすることです。非同期エラーの定義については、エラーの種類を参照してください。

エラーイベントに応答するためにイベントリスナーとイベントハンドラを作成することができます。多くのクラスが、他のイベントの送出時と同じ方法でエラーイベントを送出します。たとえば、XMLSocket クラスのインスタンスは通常、3 種類のイベント (Event.CLOSEEvent.CONNECT、および DataEvent.DATA) を送出します。ただし、問題が発生した場合には、XMLSocket クラスは IOErrorEvent.IOError または SecurityErrorEvent.SECURITY_ERROR を送出できます。イベントリスナーとイベントハンドラの詳細については、イベントの処理を参照してください。

エラーイベントは、次の 2 つのカテゴリのいずれかに該当します。

サブトピック

エラーイベントの操作
ステータス変化イベントの操作

エラーイベントの操作

ErrorEvent クラスとそのサブクラスは、データの読み取りまたは書き込みをしようとするときに Flash Player から送出されるエラーを処理するためにエラーの種類を格納しています。

次の例では、ローカルファイルを読み取ろうとして検出されたエラーを表示するために、try..catch ステートメントおよびエラーイベントハンドラの両方を使用しています。もっと高度な処理コードを追加することで、ユーザーにオプションを提供するか、そうでなければ、コメントの「ここにエラー処理コードを記述」の場所でエラーを自動的に処理できます。

package
{
    import flash.display.Sprite;
    import flash.errors.IOError;
    import flash.events.IOErrorEvent;
    import flash.events.TextEvent;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.net.URLRequest;
    import flash.text.TextField;

    public class LinkEventExample extends Sprite
    {
        private var myMP3:Sound;
        public function LinkEventExample()
        {
            myMP3 = new Sound();
            var list:TextField = new TextField();
            list.autoSize = TextFieldAutoSize.LEFT;
            list.multiline = true;
            list.htmlText = "<a href=\"event:track1.mp3\">Track 1</a><br>";
            list.htmlText += "<a href=\"event:track2.mp3\">Track 2</a><br>";
            addEventListener(TextEvent.LINK, linkHandler);
            addChild(list);
        }
        
        private function playMP3(mp3:String):void
        {
            try
            {
                myMP3.load(new URLRequest(mp3));
                myMP3.play();
            }
            catch (err:Error)
            {
                trace(err.message);
                // ここにエラー処理コードを記述
            }
            myMP3.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
        }

        private function linkHandler(linkEvent:TextEvent):void
        {
            playMP3(linkEvent.text);
            // ここにエラー処理コードを記述
        }
        
        private function errorHandler(errorEvent:IOErrorEvent):void
        {
            trace(errorEvent.text);
            // ここにエラー処理コードを記述
        }
    }
}

ステータス変化イベントの操作

Flash Player では、level プロパティをサポートするクラスの netStatus.info.level または status.level プロパティの値は動的に変化します。netStatus.info.level プロパティを持つクラスは、NetConnection、NetStream、および SharedObject です。status.level プロパティを持つクラスは、HTTPStatusEvent、Camera、Microphone、および LocalConnection です。level 値の変化に応答して通信エラーを追跡するために、ハンドラ関数を記述します。

次の例では、netStatusHandler() 関数を使用して、level プロパティの値をテストしています。level プロパティがエラーの検出を示している場合は、"Video stream failed" というメッセージをトレースします。

package
{
    import flash.display.Sprite;
    import flash.events.NetStatusEvent;
    import flash.events.SecurityErrorEvent;
    import flash.media.Video;
    import flash.net.NetConnection;
    import flash.net.NetStream;

    public class VideoExample extends Sprite
    {
        private var videoUrl:String = "Video.flv";
        private var connection:NetConnection;
        private var stream:NetStream;

        public function VideoExample()
        {
            connection = new NetConnection();
            connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
            connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
            connection.connect(null);
        }

        private function netStatusHandler(event:NetStatusEvent):void
        {
            if (event.info.level = "error")
            {
                trace("Video stream failed")
            }
            else 
            {
                connectStream();
            }
        }

        private function securityErrorHandler(event:SecurityErrorEvent):void
        {
            trace("securityErrorHandler: " + event);
        }

        private function connectStream():void
        {
            var stream:NetStream = new NetStream(connection);
            var video:Video = new Video();
            video.attachNetStream(stream);
            stream.play(videoUrl);
            addChild(video);
        }
    }
}

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000104.html