Flash CS3 ドキュメンテーション |
|||
| ActionScript 3.0 のプログラミング > エラー処理 > エラーイベントへの応答とステータス | |||
ActionScript 3.0 のエラー処理で向上した最も重要な機能の 1 つは、非同期のランタイムエラーに応答するためのエラーイベント処理をサポートすることです。非同期エラーの定義については、エラーの種類を参照してください。
エラーイベントに応答するためにイベントリスナーとイベントハンドラを作成することができます。多くのクラスが、他のイベントの送出時と同じ方法でエラーイベントを送出します。たとえば、XMLSocket クラスのインスタンスは通常、3 種類のイベント (Event.CLOSE、Event.CONNECT、および DataEvent.DATA) を送出します。ただし、問題が発生した場合には、XMLSocket クラスは IOErrorEvent.IOError または SecurityErrorEvent.SECURITY_ERROR を送出できます。イベントリスナーとイベントハンドラの詳細については、イベントの処理を参照してください。
エラーイベントは、次の 2 つのカテゴリのいずれかに該当します。
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);
}
}
}
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000104.html