Flash CS3 설명서 |
|||
| ActionScript 3.0 프로그래밍 > 오류 처리 > 오류 이벤트 및 상태에 응답 | |||
ActionScript 3.0 오류 처리에서 가장 주목할 만한 개선 사항 중 하나는 비동기 런타임 오류에 응답하기 위한 오류 이벤트 처리가 지원된다는 것입니다. 비동기 오류에 대한 정의는 오류 유형을 참조하십시오.
이벤트 리스너 및 이벤트 핸들러를 만들어 오류 이벤트에 응답할 수 있습니다. 많은 클래스에서 다른 이벤트를 전달하는 것과 같은 방식으로 오류 이벤트를 전달합니다. 예를 들어, XMLSocket 클래스의 인스턴스는 일반적으로 Event.CLOSE, Event.CONNECT, DataEvent.DATA의 세 가지 유형의 이벤트를 전달합니다. 하지만 문제 발생 시 XMLSocket 클래스는 IOErrorEvent.IOError 또는 SecurityErrorEvent.SECURITY_ERROR를 전달할 수 있습니다. 이벤트 리스너 및 이벤트 핸들러에 대한 자세한 내용은 이벤트 처리를 참조하십시오.
오류 이벤트는 다음 두 범주 중 하나에 해당됩니다.
flash.events.ErrorEvent 클래스에는 네트워킹 및 통신 작업과 관련한 Flash Player 런타임 오류를 관리하기 위한 속성 및 메서드가 포함됩니다. AsyncErrorEvent, IOErrorEvent, SecurityErrorEvent 클래스는 ErrorEvent 클래스를 확장합니다. Flash Player의 디버거 버전을 사용하는 경우에는 런타임에 대화 상자가 표시되어 플레이어에서 발생하는 리스너 함수가 없는 모든 오류 이벤트를 알립니다.
상태 기반 오류 이벤트는 네트워킹 및 통신 클래스의 netStatus 및 status 속성과 관련됩니다. Flash Player에서 데이터를 읽거나 쓸 때 문제가 발생하면 사용 중인 클래스 객체에 따라 netStatus.info.level이나 status.level 속성의 값이 "error" 값으로 설정됩니다. 이벤트 핸들러 함수에서 level 속성에 "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