Hata olaylarını ve durumunu yanıtlamaFlash Player 9 ve üstü, Adobe AIR 1.0 ve üstü 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:
Hata olaylarıyla çalışmaErrorEvent 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ışmaFlash ç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); } } } |
|