오류 이벤트 및 상태에 응답

ActionScript 3.0 오류 처리에서 가장 주목할 만한 개선 사항 중 하나는 비동기 런타임 오류에 응답하기 위한 오류 이벤트 처리가 지원된다는 것입니다. 비동기 오류에 대한 정의는 오류 유형을 참조하십시오.

이벤트 리스너 및 이벤트 핸들러를 만들어 오류 이벤트에 응답할 수 있습니다. 많은 클래스에서 다른 이벤트를 전달하는 것과 같은 방식으로 오류 이벤트를 전달합니다. 예를 들어, XMLSocket 클래스의 인스턴스는 일반적으로 Event.CLOSE, Event.CONNECT, DataEvent.DATA의 세 가지 유형의 이벤트를 전달합니다. 하지만 문제 발생 시 XMLSocket 클래스는 IOErrorEvent.IOError 또는 SecurityErrorEvent.SECURITY_ERROR를 전달할 수 있습니다. 이벤트 리스너 및 이벤트 핸들러에 대한 자세한 내용은 이벤트 처리를 참조하십시오.

오류 이벤트는 다음 두 범주 중 하나에 해당됩니다.

세부 목차

여기에 오류 처리 코드를 입력하십시오.오류 이벤트를 사용한 작업
상태 변경 이벤트를 사용한 작업

여기에 오류 처리 코드를 입력하십시오.오류 이벤트를 사용한 작업

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);
        }
    }
}

Flash CS3

 

이 페이지에 의견 추가되면 전자 메일 알림 받기 | 의견 보고서

현재 페이지: http://livedocs.adobe.com/flash/9.0_kr/main/00000104.html