오류 이벤트 및 상태에 응답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);
}
}
}
|
|