エラーイベントおよびステータスへの応答Flash Player 9 以降、Adobe AIR 1.0 以降 ActionScript 3.0 のエラー処理で向上した最も重要な機能の 1 つは、アプリケーションの実行中に非同期のランタイムエラーに応答するためのエラーイベント処理のサポートです。非同期エラーの定義について詳しくは、エラーの種類を参照してください。 エラーイベントに応答するためにイベントリスナーとイベントハンドラーを作成することができます。 多くのクラスが、他のイベントの送出時と同じ方法でエラーイベントを送出します。 例えば、XMLSocket クラスのインスタンスは通常、3 種類のイベント(Event.CLOSE、Event.CONNECT および DataEvent.DATA)を送出します。ただし、問題が発生した場合には、XMLSocket クラスは IOErrorEvent.IOError または SecurityErrorEvent.SECURITY_ERROR を送出できます。イベントリスナーとイベントハンドラーについて詳しくは、イベント処理を参照してください。 エラーイベントは、次の 2 つのカテゴリのいずれかに該当します。
エラーイベントの操作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);
}
}
}
|
|