Pakiet | flash.events |
Klasa | public class UncaughtErrorEvent |
Dziedziczenie | UncaughtErrorEvent ErrorEvent TextEvent Event Object |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
try..catch
lub gdy zostanie wywołany obiekt zdarzenia ErrorEvent, dla którego nie zarejestrowano żadnych detektorów. Funkcja obsługi zdarzeń nieprzechwyconych błędów jest nazywana często „globalną funkcją obsługi błędów”.
Obiekt UncaughtErrorEvents, który wywołuje zdarzenie, jest powiązany albo z obiektem LoaderInfo, albo z obiektem Loader. Następujące właściwości umożliwiają dostęp do instancji klasy UncaughtErrorEvents:
-
LoaderInfo.uncaughtErrorEvents
: służy do wykrywania nieprzechwyconych błędów w kodzie zdefiniowanym w tym samym pliku SWF. -
Loader.uncaughtErrorEvents
: służy do wykrywania nieprzechwyconych błędów w kodzie zdefiniowanym w pliku SWF załadowanym przez obiekt Loader.
Gdy wystąpi zdarzenie uncaughtError
, to nawet jeśli zdarzenie zostanie obsłużone, wykonywanie nie jest kontynuowane w stosie wywołań, który spowodował błąd. Jeśli błąd jest błędem synchronicznym, kod pozostały w funkcji, w której wystąpił, nie jest wykonywany. W rezultacie istnieje duże prawdopodobieństwo, że po wystąpieniu zdarzenia nieprzechwyconego błędu aplikacja będzie w stanie niestabilnym. Ponieważ może istnieć wiele przyczyn nieprzechwyconych błędów, nie można przewidzieć, jaka funkcjonalność jest dostępna po błędzie. Możliwe, na przykład, że aplikacja wciąż może wykonywać operacje sieciowe lub plikowe. Jednak nie ma gwarancji, że wykonywanie takich operacji jest możliwe.
W sytuacji, gdy jeden plik SWF ładuje inny plik, zdarzenia uncaughtError
są propagowane w dół i z powrotem w górę przez hierarchię LoaderInfo. Załóżmy na przykład, że plik A.swf ładuje B.swf za pomocą instancji klasy Loader. Jeśli w pliku B.swf wystąpi nieprzechwycony błąd, zdarzenie uncaughtError
będzie kierowane do obiektów LoaderInfo i Loader w następującej kolejności:
- (Faza przechwytywania) LoaderInfo pliku A.swf.
- (Faza przechwytywania) Loader w pliku A.swf.
- (Faza celu) LoaderInfo pliku B.swf.
- (Faza propagacji) Loader w pliku A.swf.
- (Faza propagacji) LoaderInfo pliku A.swf.
Właściwość uncaughtErrorEvents
obiektu Loader nigdy nie wywołuje zdarzenia uncaughtErrorEvent
w fazie celu. Wywołuje to zdarzenie wyłącznie w fazach przechwytywania i propagacji.
Podobnie jak przy propagacji innych zdarzeń, wywołanie metody stopPropagation()
lub stopImmediatePropagation()
przerywa kierowanie zdarzenia do innych detektorów — z jedną ważną różnicą. Przy propagacji zdarzeń obiekt UncaughtErrorEvents obiektu Loader jest traktowany jako para z obiektem LoaderInfo.uncaughtErrorEvents
załadowanego pliku SWF. Jeśli detektor zarejestrowany dla jednego z tych obiektów wywoła metodę stopPropagation()
, zdarzenia nadal będą kierowane do innych detektorów zarejestrowanych dla tego obiektu UncaughtErrorEvents i do detektorów zarejestrowanych dla drugiego obiektu UncaughtErrorEvents należącego do pary. Metoda stopImmediatePropagation()
nadal blokuje kierowanie zdarzeń do wszelkich innych detektorów.
Gdy treść działa w wersji odtwarzacza Flash Player z debugerem lub w programie AIR Debug Launcher (ADL), wystąpienie nieprzechwyconego błędu powoduje wyświetlenie stosownego okna dialogowego. W tych wersjach środowiska wykonawczego okno dialogowe błędu pojawia się nawet wtedy, gdy zarejestrowany jest detektor zdarzenia uncaughtError
. Aby zapobiec wyświetlaniu okna dialogowego w tej sytuacji, należy wywołać metodę preventDefault()
obiektu UncaughtErrorEvent.
Jeśli treść ładowana przez obiekt Loader jest plikiem SWF w formacie maszyny AVM1 (ActionScript 2), nieprzechwycone błędy w pliku SWF AVM1 nie będą powodowały wywoływania zdarzeń uncaughtError
. Również błędy w kodzie JavaScript w treści HTML ładowanej w obiekcie HTMLLoader (w tym w elemencie sterującym HTML środowiska Flex) nie powodują wywoływania zdarzeń uncaughtError
.
Powiązane elementy interfejsu API
Właściwość | Zdefiniowane przez | ||
---|---|---|---|
bubbles : Boolean [tylko do odczytu]
Określa, czy zdarzenie może przechodzić fazę propagacji. | Event | ||
cancelable : Boolean [tylko do odczytu]
Wskazuje, czy można uniemożliwić operacje skojarzone ze zdarzeniem. | Event | ||
constructor : Object
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu. | Object | ||
currentTarget : Object [tylko do odczytu]
Obiekt przetwarzający aktywnie obiekt Event za pomocą detektora zdarzeń. | Event | ||
error : * [tylko do odczytu]
Obiekt błędu skojarzony z nieprzechwyconym błędem. | UncaughtErrorEvent | ||
errorID : int [tylko do odczytu]
Zawiera numer referencyjny skojarzony z konkretnym błędem. | ErrorEvent | ||
eventPhase : uint [tylko do odczytu]
Bieżąca faza przepływu zdarzeń. | Event | ||
target : Object [tylko do odczytu]
Miejsce docelowe zdarzenia. | Event | ||
text : String
W przypadku zdarzenia textInput jest to znak lub sekwencja znaków wprowadzonych przez użytkownika. | TextEvent | ||
type : String [tylko do odczytu]
Typ zdarzenia. | Event |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)
Tworzy obiekt UncaughtErrorEvent zawierający informacje o zdarzeniu uncaughtError. | UncaughtErrorEvent | ||
[przesłanianie]
Tworzy kopię obiektu UncaughtErrorEvent i ustawia wartości poszczególnych właściwości zgodnie z właściwościami oryginału. | UncaughtErrorEvent | ||
Funkcja narzędziowa umożliwiająca implementację metody toString() w niestandardowych klasach Event w języku ActionScript 3.0. | Event | ||
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość. | Object | ||
Sprawdza, czy w odniesieniu do tego zdarzenia wywołano metodę preventDefault(). | Event | ||
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr. | Object | ||
Anuluje domyślne ustawienia zdarzenia, o ile zachowanie to może być anulowane. | Event | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Ustawia dostępność właściwości dynamicznej używanej w pętlach. | Object | ||
Zapobiega przetwarzaniu wszelkich detektorów zdarzeń w węźle bieżącym i węzłach następujących po nim. | Event | ||
Zapobiega przetwarzaniu wszelkich detektorów zdarzeń w węzłach następujących po węźle bieżącym w przepływie zdarzeń. | Event | ||
Zwraca ciąg reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień regionalnych. | Object | ||
[przesłanianie]
Zwraca ciąg znaków, który zawiera wszystkie właściwości obiektu UncaughtErrorEvent. | UncaughtErrorEvent | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object |
Stała | Zdefiniowane przez | ||
---|---|---|---|
UNCAUGHT_ERROR : String = "uncaughtError" [statyczny]
Definiuje wartość właściwości type obiektu zdarzenia uncaughtError. | UncaughtErrorEvent |
error | właściwość |
error:*
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Obiekt błędu skojarzony z nieprzechwyconym błędem. Zwykle jest to obiekt należący do jednego z następujących typów danych:
- Instancja klasy Error (lub jednej z jej podklas), jeśli nieprzechwycony błąd jest błędem synchronicznym utworzonym przez instrukcję
throw
, takim jak np. błąd, który mógł być przechwycony w blokutry..catch
. - Instancja klasy ErrorEvent (lub jednej z jej podklas), jeśli nieprzechwycony błąd jest błędem asynchronicznym, którego wystąpienie powoduje wywołanie zdarzenia błędu.
Jednak właściwość error
może być obiektem dowolnego typu. Specyfikacja języka ActionScript nie wymaga, aby instrukcja throw
była używana tylko z obiektami typu Error. Na przykład poniższy kod jest poprawny zarówno na etapie kompilacji, jak i w czasie wykonywania:
throw new Sprite()
Jeśli ta instrukcja throw
nie zostanie przechwycona przez blok try..catch
, instrukcja throw
wygeneruje zdarzenie uncaughtError
. W takim przypadku właściwość error
wywołanego obiektu UncaughtErrorEvent jest obiektem Sprite skonstruowanym w instrukcji throw
.
Dlatego w detektorze zdarzeń uncaughtError
należy sprawdzać typ danych właściwości error
. Poniższy przykład demonstruje sprawdzanie typu:
function uncaughtErrorHandler(event:UncaughtErrorEvent):void { var message:String; if (event.error is Error) { message = Error(event.error).message; } else if (event.error is ErrorEvent) { message = ErrorEvent(event.error).text; } else { message = event.error.toString(); } }
Jeśli właściwość błędu (error
) zawiera wystąpienie klasy Error (lub jej podklasy), zbiór dostępnych informacji o błędzie zależy od wersji środowiska wykonawczego, w którym jest uruchomiona zawartość:
W wersji środowiska wykonawczego z debugerem (na przykład w programie Flash Player z debugerem lub środowisku AIR Debug Launcher):
- Metoda
Error.getStackTrace()
zwraca stos wywołań, które doprowadziły do błędu. - Element
Error.message
zawiera pełny tekst komunikatu o błędzie.
- Metoda
W wersji środowiska wykonawczego bez debugera:
- Metoda
Error.getStackTrace()
zwraca stos wywołań, które doprowadziły do błędu. Informacje o stosie wywołań nie zawierają nazw plików źródłowych ani numerów wierszy. - Właściwość
Error.message
zawiera skróconą wersję komunikatu o błędzie, która często jest połączeniem właściwościError.errorID
iError.name
.
- Metoda
W wersji środowiska wykonawczego bez debugera (program Flash Player 11.4 lub starsza wersja albo środowisko AIR 1.4 lub starsza wersja):
- Metoda
Error.getStackTrace()
zwraca wartośćnull
. - Właściwość
Error.message
zawiera skróconą wersję komunikatu o błędzie, która często jest połączeniem właściwościError.errorID
iError.name
.
- Metoda
Wszystkie pozostałe właściwości i metody klasy Error są dostępne we wszystkich wersjach środowiska wykonawczego.
Jeśli właściwość błędu (error
) jest wystąpieniem klasy ErrorEvent, informacje o stosie wywołań nigdy nie są dostępne.
Implementacja
public function get error():*
UncaughtErrorEvent | () | Konstruktor |
public function UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Tworzy obiekt UncaughtErrorEvent zawierający informacje o zdarzeniu uncaughtError
.
type:String (default = NaN ) — Typ zdarzenia.
| |
bubbles:Boolean (default = true ) — Określa, czy obiekt Event uczestniczy w etapie propagacji przepływu zdarzeń. Detektory zdarzeń mogą uzyskiwać dostęp do tej informacji za pośrednictwem dziedziczonej właściwości bubbles .
| |
cancelable:Boolean (default = true ) — Określa, czy obiekt Event może zostać anulowany. Detektory zdarzeń mogą uzyskiwać dostęp do tej informacji za pośrednictwem dziedziczonej właściwości cancelable .
| |
error_in:* (default = null ) — Obiekt skojarzony z błędem, który nie został przechwycony lub obsłużony (w normalnych okolicznościach jest to obiekt Error lub ErrorEvent).
|
clone | () | metoda |
override public function clone():Event
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Tworzy kopię obiektu UncaughtErrorEvent i ustawia wartości poszczególnych właściwości zgodnie z właściwościami oryginału.
ZwracaEvent — Nowy obiekt UncaughtErrorEvent z wartościami właściwości zgodnymi z oryginałem.
|
toString | () | metoda |
UNCAUGHT_ERROR | Stała |
public static const UNCAUGHT_ERROR:String = "uncaughtError"
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Definiuje wartość właściwości type
obiektu zdarzenia uncaughtError
.
Uwaga: Jeśli na przykład blok try zawiera obiekt wywołujący zdarzenie jego modułu obsługi zdarzeń, blok catch nie przechwytuje błędu w przypadku wygenerowania błędu przez ten moduł. Każdy błąd wygenerowany później może zostać przechwycony przez wykrywanie zdarzenia LoaderInfo.uncaughtErrorEvents
.
To zdarzenie ma następujące właściwości:
Właściwość | Wartość |
---|---|
bubbles | true |
cancelable | true : anulowanie zdarzenia zapobiega wyświetlaniu okna dialogowego nieprzechwyconego błędu w wersjach środowiska wykonawczego wyposażonych w debuger. |
currentTarget | Obiekt przetwarzający aktywnie obiekt Event za pomocą detektora zdarzeń. |
error | Nieprzechwycony błąd. |
target | Obiekt LoaderInfo skojarzony z plikiem SWF, w którym wystąpił błąd. |
text | Tekst komunikatu o błędzie. |
uncaughtError
służący do wykrywania nieprzechwyconych błędów. Ponadto w przykładzie uwzględniono przycisk, którego użycie powoduje wygenerowanie błędu przeznaczonego do przechwycenia przez podprogram obsługi zdarzeń.
W konstruktorze rejestrowany jest detektor zdarzeń uncaughtError
wywoływanych przez właściwość uncaughtErrorEvents
obiektu LoaderInfo.
W metodzie uncaughtErrorHandler()
sprawdzany jest typ danych właściwości error
i podejmowana jest odpowiednia reakcja.
package { import flash.display.Sprite; import flash.events.ErrorEvent; import flash.events.MouseEvent; import flash.events.UncaughtErrorEvent; public class UncaughtErrorEventExample extends Sprite { public function UncaughtErrorEventExample() { loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); drawUI(); } private function uncaughtErrorHandler(event:UncaughtErrorEvent):void { if (event.error is Error) { var error:Error = event.error as Error; // do something with the error } else if (event.error is ErrorEvent) { var errorEvent:ErrorEvent = event.error as ErrorEvent; // do something with the error } else { // a non-Error, non-ErrorEvent type was thrown and uncaught } } private function drawUI():void { var btn:Sprite = new Sprite(); btn.graphics.clear(); btn.graphics.beginFill(0xFFCC00); btn.graphics.drawRect(0, 0, 100, 50); btn.graphics.endFill(); addChild(btn); btn.addEventListener(MouseEvent.CLICK, clickHandler); } private function clickHandler(event:MouseEvent):void { throw new Error("Gak!"); } } }
<?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" applicationComplete="applicationCompleteHandler();"> <fx:Script> <![CDATA[ import flash.events.ErrorEvent; import flash.events.MouseEvent; import flash.events.UncaughtErrorEvent; private function applicationCompleteHandler():void { loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); } private function uncaughtErrorHandler(event:UncaughtErrorEvent):void { if (event.error is Error) { var error:Error = event.error as Error; // do something with the error } else if (event.error is ErrorEvent) { var errorEvent:ErrorEvent = event.error as ErrorEvent; // do something with the error } else { // a non-Error, non-ErrorEvent type was thrown and uncaught } } private function clickHandler(event:MouseEvent):void { throw new Error("Gak!"); } ]]> </fx:Script> <s:Button label="Cause Error" click="clickHandler(event);"/> </s:WindowedApplication>
uncaughtError
służący do wykrywania nieprzechwyconych błędów.
W konstruktorze tworzony jest obiekt Loader i rejestrowany detektor zdarzeń uncaughtError
wywoływanych przez właściwość uncaughtErrorEvents
obiektu Loader.
W metodzie uncaughtErrorHandler()
sprawdzany jest typ danych właściwości error
i podejmowane jest odpowiednie działanie.
package { import flash.display.Loader; import flash.display.Sprite; import flash.events.ErrorEvent; import flash.events.UncaughtErrorEvent; import flash.net.URLRequest; public class LoaderUncaughtErrorEventExample extends Sprite { private var ldr:Loader; public function LoaderUncaughtErrorEventExample() { ldr = new Loader(); ldr.load(new URLRequest("child.swf")); ldr.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); } private function uncaughtErrorHandler(event:UncaughtErrorEvent):void { if (event.error is Error) { var error:Error = event.error as Error; // do something with the error } else if (event.error is ErrorEvent) { var errorEvent:ErrorEvent = event.error as ErrorEvent; // do something with the error } else { // a non-Error, non-ErrorEvent type was thrown and uncaught } } } }
Tue Jun 12 2018, 12:06 PM Z