오류 이벤트 및 상태에 응답Flash Player 9 이상, Adobe AIR 1.0 이상 ActionScript 3.0 오류 처리에서 가장 주목할 만한 개선 사항 중 하나는 응용 프로그램이 실행되는 동안 비동기 오류에 응답하기 위한 오류 이벤트 처리가 지원된다는 것입니다. 비동기 오류에 대한 정의는 오류 유형을 참조하십시오. 이벤트 리스너 및 이벤트 핸들러를 만들어 오류 이벤트에 응답할 수 있습니다. 많은 클래스에서 다른 이벤트를 전달하는 것과 같은 방식으로 오류 이벤트를 전달합니다. 예를 들어 XMLSocket 클래스의 인스턴스는 일반적으로 Event.CLOSE, Event.CONNECT, DataEvent.DATA의 세 가지 유형의 이벤트를 전달합니다. 하지만 문제 발생 시 XMLSocket 클래스는 IOErrorEvent.IOError 또는 SecurityErrorEvent.SECURITY_ERROR를 전달할 수 있습니다. 이벤트 리스너 및 이벤트 핸들러에 대한 자세한 내용은 이벤트 처리를 참조하십시오. 오류 이벤트는 다음 두 범주 중 하나에 해당됩니다.
오류 이벤트를 사용한 작업ErrorEvent 클래스 및 그 하위 클래스에는 데이터를 읽거나 쓸 때 Flash 런타임에서 전달한 오류 처리를 위한 오류 유형이 포함됩니다. 다음 예제는 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 런타임은 응용 프로그램이 실행되는 동안 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); } } } |
|