Adobe Flex 3 ヘルプ

エラーイベントおよびステータスへの応答

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

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

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

  • ErrorEvent クラスを拡張したエラーイベント

    flash.events.ErrorEvent クラスには、ネットワークおよび通信の操作に関係したランタイムエラーを管理するためのプロパティおよびメソッドが含まれています。AsyncErrorEvent、IOErrorEvent、および SecurityErrorEvent クラスは ErrorEvent クラスを拡張したものです。デバッグ版の Flash Player または Adobe AIR を使用している場合は、リスナー関数が検出されなくても、実行時にダイアログボックスでエラーイベントが通知されます。

  • ステータスに基づくエラーイベント

    ステータスに基づくエラーイベントは、ネットワーククラスと通信クラスの netStatus および status プロパティに関係します。データの読み取りまたは書き込み時に Flash Player または Adobe AIR で問題が検出されると、使用中のクラスオブジェクトに応じて、netStatus.info.level または status.level プロパティが値 "error" に設定されます。このエラーに応答するために、イベントハンドラ関数で level プロパティに値 "error" があるかどうかをチェックします。

サブトピック



エラーイベントの操作

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

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

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;
    import flash.text.TextFieldAutoSize;

    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);
                // your error-handling code here
            }
            myMP3.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
        }

        private function linkHandler(linkEvent:TextEvent):void
        {
            playMP3(linkEvent.text);
            // your error-handling code here
        }
        
        private function errorHandler(errorEvent:IOErrorEvent):void
        {
            trace(errorEvent.text);
            // your error-handling code here
        }
    }
}

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

Flash Player および Adobe AIR では、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);
        }
    }
}

 

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