ActionScript 3.0'da hata işleme konusunda en dikkate değer iyileştirmelerden biri, bir uygulama çalışırken senkronize olmayan çalışma zamanı hatalarını yanıtlamak için hata olayı işleme desteğidir. (Eşzamansız hataların bir tanımı için, bkz.
Hata türleri
.)
Hata olaylarını yanıtlamak için olay dinleyicileri ve olay işleyicileri oluşturabilirsiniz. Sınıfların çoğu, diğer olayları gönderdikleri şekilde hata olaylarını da gönderir. Örneğin, XMLSocket sınıfının bir örneği normalde üç olay türü gönderir:
Event.CLOSE
,
Event.CONNECT
ve
DataEvent.DATA
. Ancak bir sorun oluştuğunda, XMLSocket sınıfı,
IOErrorEvent.IOError
veya
SecurityErrorEvent.SECURITY_ERROR
öğesini gönderebilir. Olay dinleyicileri ve olay işleyicileri hakkında daha fazla bilgi için, bkz.
Olayları işleme
.
Hata olayları, iki kategoriden birisine girer:
-
ErrorEvent sınıfını genişleten hata olayları
flash.events.ErrorEvent sınıfı, çalışan bir uygulamada ağ iletişimi ve iletişim işlemleriyle ilgili çalışma zamanı hatalarının yönetilmesine yönelik özellikleri ve yöntemleri içerir. AsyncErrorEvent, IOErrorEvent ve SecurityErrorEvent sınıfları, ErrorEvent sınıfını genişletir. Bir Flash çalışma zamanının hata ayıklayıcı sürümünü kullanıyorsanız, bir iletişim kutusu, oynatıcının karşılaştığı dinleyici işlevleri olmadan çalışma zamanında hata olaylarını size bildirir.
-
Durum tabanlı hata olayları
Durum tabanlı hata olayları, ağ iletişimi ve iletişim sınıflarının
netStatus
ve
status
özellikleriyle ilgilidir. Bir Flash çalışma zamanı, veri okurken ya da yazarken bir sorunla karşılaşırsa,
netStatus.info.level
veya
status.level
özelliklerinin değeri (kullandığınız sınıf nesnesine bağlı olarak),
"error"
değerine ayarlanır.
level
özelliğinin, olay işleyicisi işlevinizde
"error"
değerini içerip içermediğini kontrol ederek bu hatayı yanıtlarsınız.
Hata olaylarıyla çalışma
ErrorEvent sınıfı ve bu sınıfın alt sınıfları, veri okumaya veya yazmaya çalıştıkça, Flash çalışma zamanları tarafından gönderilen hataların işlenmesine yönelik hata türlerini içerir.
Aşağıdaki örnek, yerel bir dosya okunmaya çalışılırken algılanan hataları görüntülemek için, bir
try..catch
deyimini ve hata olayı işleyicilerini kullanır. Kullanıcıya seçenekler sağlamak için daha gelişmiş işleme kodu ekleyebilir veya “your error-handling code here”: yorumunun belirttiği yerde otomatik olarak hatayı işleyebilirsiniz.
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
}
}
}
Durum değişikliği olaylarıyla çalışma
Flash çalışma zamanları bir uygulama çalışırken
level
özelliğini destekleyen sınıflara ilişkin
netStatus.info.level
veya
status.level
özelliklerinin değerini dinamik olarak değiştirir.
netStatus.info.level
özelliğine sahip sınıflar, NetConnection, NetStream ve SharedObject sınıflarıdır.
status.level
özelliğine sahip sınıflar, HTTPStatusEvent, Camera, Microphone ve LocalConnection sınıflarıdır.
level
değerindeki değişikliğe yanıt vermek ve iletişim hatalarını izlemek için bir işleyici işlevi yazabilirsiniz.
Aşağıdaki örnek,
level
özelliğinin değerini test etmek için bir
netStatusHandler()
işlevini kullanır.
level
özelliği bir hatayla karşılaşıldığını belirtirse, kod “Video stream failed” mesajını izler.
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);
}
}
}
|
|
|