Pacchetto | flash.events |
Classe | public class UncaughtErrorEvent |
Ereditarietà | UncaughtErrorEvent ErrorEvent TextEvent Event Object |
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10.1, AIR 2 |
try..catch
o quando un oggetto ErrorEvent viene inviato senza listener registrati. La funzionalità dell'evento di errore non rilevato viene spesso descritta come "gestore di errore globale".
L'oggetto UncaughtErrorEvents che invia l'evento è associato a un oggetto LoaderInfo o Loader. Utilizzate le seguenti proprietà per accedere a un'istanza UncaughtErrorEvents:
-
LoaderInfo.uncaughtErrorEvents
: per rilevare gli errori non rilevati nel codice definito nello stesso file SWF. -
Loader.uncaughtErrorEvents
: per rilevare gli errori non rilevati nel codice definito nel file SWF caricato da un oggetto Loader.
Quando si verifica un evento uncaughtError
, anche se l'evento è gestito, l'esecuzione non continua nello stack di chiamate che ha causato l'errore. Se l'errore è di tipo sincrono, il codice rimanente nella funzione in cui si è verificato l'errore non viene eseguito. Di conseguenza, è probabile che quando si verifica un evento di errore non rilevato, l'applicazione sia in uno stato instabile. Poiché le cause di un errore non rilevato possono essere molte, è impossibile prevedere quale funzionalità sia disponibile. L'applicazione potrebbe essere in grado, ad esempio, di eseguire operazioni di rete oppure operazioni sui file. Tali operazioni, tuttavia, non sono necessariamente disponibili.
Quando un file SWF ne carica un altro, gli eventi uncaughtError
si propagano verso l'alto o verso il basso nella gerarchia di LoaderInfo. Si supponga ad esempio che A.swf carichi B.swf utilizzando un'istanza Loader. Se in B.swf si verifica un errore non rilevato, viene inviato un evento uncaughtError
agli oggetti LoaderInfo e Loader nella sequenza seguente:
- (Fase di cattura) LoaderInfo di A.swf
- (Fase di cattura) Loader in A.swf
- (Fase target) LoaderInfo di B.swf
- (Fase di bubbling) Loader in A.swf
- (Fase di bubbling) LoaderInfo di A.swf
La proprietà uncaughtErrorEvents
di un oggetto Loader non invia mai un uncaughtErrorEvent
nella fase target. Invia l'evento solo nelle fasi di cattura e bubbling.
Come per la propagazione di altri eventi, la chiamata a stopPropagation()
o stopImmediatePropagation()
interrompe l'invio dell'evento ad altri listener, con un'importante differenza. Ai fini della propagazione eventi, l'oggetto UncaughtErrorEvents di un oggetto Loader viene considerato come una coppia con l'oggetto LoaderInfo.uncaughtErrorEvents
del file SWF caricato. Se un listener registrato con uno di tali oggetti chiama il metodo stopPropagation()
, gli eventi vengono comunque inviati ad altri listener registrati con tale oggetto UncaughtErrorEvents e ai listener registrati con il relativo oggetto UncaughtErrorEvents partner, prima del termine della propagazione degli eventi. Il metodo stopImmediatePropagation()
impedisce tuttavia l'invio degli eventi a tutti i listener aggiuntivi.
Quando il contenuto è in esecuzione nella versione di debug del runtime, ad esempio la versione di debug di Flash Player o in AIR Debug Launcher (ADL), in caso di un errore non rilevato viene visualizzata una finestra di dialogo corrispondente. Per tali versioni del runtime, la finestra di dialogo di errore viene visualizzata anche quando per l'evento uncaughtError
è registrato un listener. Per impedire la visualizzazione della finestra di dialogo in tale situazione, chiamate il metodo preventDefault()
dell'oggetto UncaughtErrorEvent.
Se il contenuto caricato da un oggetto Loader è un file SWF AVM1 (ActionScript 2), gli errori non rilevati nel file SWF AVM1 non generano un evento uncaughtError
. Nemmeno gli errori JavaScript presenti in un contenuto HTML caricato in un oggetto HTMLLoader (incluso un controllo HTML di Flex) generano un evento uncaughtError
.
Elementi API correlati
Proprietà | Definito da | ||
---|---|---|---|
bubbles : Boolean [sola lettura]
Indica se un evento è un evento di bubbling. | Event | ||
cancelable : Boolean [sola lettura]
Indica se il comportamento associato all'evento può essere impedito. | Event | ||
constructor : Object
Un riferimento all'oggetto classe o alla funzione di costruzione per una determinata istanza di oggetto. | Object | ||
currentTarget : Object [sola lettura]
L'oggetto che elabora attivamente l'oggetto Event con un listener di eventi. | Event | ||
error : * [sola lettura]
L'oggetto Error associato all'errore non rilevato. | UncaughtErrorEvent | ||
errorID : int [sola lettura]
Contiene il numero di riferimento associato all'errore specifico. | ErrorEvent | ||
eventPhase : uint [sola lettura]
La fase attuale del flusso di eventi. | Event | ||
target : Object [sola lettura]
Il target dell'evento. | Event | ||
text : String
Per un evento textInput, il carattere o la sequenza di caratteri immessi dall'utente. | TextEvent | ||
type : String [sola lettura]
Il tipo di evento. | Event |
Metodo | Definito da | ||
---|---|---|---|
UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)
Crea un oggetto UncaughtErrorEvent contenente informazioni su un evento uncaughtError. | UncaughtErrorEvent | ||
[override]
Crea una copia dell'oggetto UncaughtErrorEvent e imposta il valore di ogni proprietà in modo che corrisponda a quello dell'originale. | UncaughtErrorEvent | ||
Una funzione dell'utilità per l'implementazione del metodo toString() in classi Event ActionScript 3.0 personalizzate. | Event | ||
Indica se per un oggetto è definita una proprietà specifica. | Object | ||
Verifica se sull'evento è stato chiamato il metodo preventDefault(). | Event | ||
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro. | Object | ||
Annulla il comportamento predefinito di un evento se tale comportamento può essere annullato. | Event | ||
Indica se la proprietà specificata esiste ed è enumerabile. | Object | ||
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche. | Object | ||
Impedisce l'elaborazione di tutti i listener di eventi nel nodo corrente e in tutti i nodi successivi del flusso di eventi. | Event | ||
Impedisce l'elaborazione di tutti i listener di eventi nei nodi del flusso di eventi successivi a quello corrente. | Event | ||
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate. | Object | ||
[override]
Restituisce una stringa che contiene tutte le proprietà dell'oggetto UncaughtErrorEvent. | UncaughtErrorEvent | ||
Restituisce il valore di base dell'oggetto specificato. | Object |
Costante | Definito da | ||
---|---|---|---|
UNCAUGHT_ERROR : String = "uncaughtError" [statico]
Definisce il valore della proprietà type di un oggetto evento uncaughtError. | UncaughtErrorEvent |
error | proprietà |
error:*
[sola lettura] Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10.1, AIR 2 |
L'oggetto Error associato all'errore non rilevato. Il tipo di dati dell'oggetto è solitamente uno dei seguenti:
- Un'istanza Error (o una delle relative sottoclassi), se l'errore non rilevato è un errore di tipo sincrono creato da un'istruzione
throw
, ad esempio un errore che avrebbe potuto essere rilevato utilizzando un bloccotry..catch
. - Un'istanza ErrorEvent (o una delle relative sottoclassi), se l'errore non rilevato è un errore di tipo asincrono che invia un evento di errore quando si verifica l'errore.
La proprietà error
può tuttavia essere un oggetto di qualsiasi tipo di dati. ActionScript non richiede l'utilizzo di un'istruzione throw
solo con oggetti Error. Il codice seguente, ad esempio, è valido sia in fase di compilazione che in runtime:
throw new Sprite()
Se tale istruzione throw
non viene rilevata da un blocco try..catch
, essa
attiva un evento uncaughtError
. In questo caso, la proprietà error
dell'oggetto UncaughtErrorEvent viene inviata nell'oggetto Sprite creato nell'istruzione throw
.
Dovrete pertanto controllare, nel listener uncaughtError
, il tipo di dati della proprietà error
. Questa operazione di controllo è dimostrata nell'esempio seguente.
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(); } }
Se la proprietà error
contiene un’istanza Error (o una sottoclasse Error), le informazioni sull’errore disponibili variano a seconda della versione del runtime in cui è in esecuzione il contenuto, come nell’esempio seguente:
In una versione debugger del runtime, ad esempio la versione di debug di Flash Player o AIR Debug Launcher (ADL):
- Il metodo
Error.getStackTrace()
restituisce lo stack di chiamata da cui ha avuto origine l’errore. Error.message
contiene il testo del messaggio di errore completo
- Il metodo
In una versione non di debug del runtime:
- Il metodo
Error.getStackTrace()
restituisce lo stack di chiamata da cui ha avuto origine l’errore Tuttavia, le informazioni dello stack di chiamata non includono i nomi dei file di origine o i numeri di riga. - La proprietà
Error.message
contiene una versione breve del messaggio di errore, che spesso corrisponde a una combinazione delle proprietàError.errorID
eError.name
.
- Il metodo
In una versione non di debug del runtime (Flash Player 11.4 o versioni precedenti e AIR 1.4 o versioni precedenti):
- Il metodo
Error.getStackTrace()
restituiscenull
. - La proprietà
Error.message
contiene una versione breve del messaggio di errore, che spesso corrisponde a una combinazione delle proprietàError.errorID
eError.name
.
- Il metodo
Tutti gli altri metodi e proprietà della classe Error sono disponibili in tutte le versioni di runtime.
Tenete presente che se la proprietà error
è un’istanza ErrorEvent, le informazioni dello stack di chiamata non sono mai disponibili.
Implementazione
public function get error():*
UncaughtErrorEvent | () | Funzione di costruzione |
public function UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10.1, AIR 2 |
Crea un oggetto UncaughtErrorEvent contenente informazioni su un evento uncaughtError
.
type:String (default = NaN ) — Il tipo di evento.
| |
bubbles:Boolean (default = true ) — Determina se l'oggetto Event partecipa alla fase di bubbling del flusso di eventi. I listener di eventi possono accedere a queste informazioni tramite la proprietà ereditata bubbles .
| |
cancelable:Boolean (default = true ) — Determina se l'oggetto Event può essere annullato. I listener di eventi possono accedere a queste informazioni tramite la proprietà ereditata cancelable .
| |
error_in:* (default = null ) — L'oggetto associato all'errore non rilevato o gestito (in normali circostanze, un oggetto Error o ErrorEvent).
|
clone | () | metodo |
override public function clone():Event
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10.1, AIR 2 |
Crea una copia dell'oggetto UncaughtErrorEvent e imposta il valore di ogni proprietà in modo che corrisponda a quello dell'originale.
RestituisceEvent — Un nuovo oggetto UncaughtErrorEvent con proprietà dai valori identici a quelli dell'originale.
|
toString | () | metodo |
override public function toString():String
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10.1, AIR 2 |
Restituisce una stringa che contiene tutte le proprietà dell'oggetto UncaughtErrorEvent.
RestituisceString — Una stringa che contiene tutte le proprietà dell'oggetto UncaughtErrorEvent.
|
UNCAUGHT_ERROR | Costante |
public static const UNCAUGHT_ERROR:String = "uncaughtError"
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10.1, AIR 2 |
Definisce il valore della proprietà type
di un oggetto evento uncaughtError
.
Nota: se in un blocco try c’è un dispatcher di eventi che chiama il gestore di eventi, il blocco catch non rileva l'errore se generato nel gestore di eventi. Ogni errore generato in seguito può quindi essere rilevato intercettando LoaderInfo.uncaughtErrorEvents
.
Questo evento ha le seguenti proprietà:
Proprietà | Valore |
---|---|
bubbles | true |
cancelable | true ; l'annullamento dell'evento impedisce la visualizzazione della finestra di dialogo relativa all'errore non rilevato nelle versioni di debug del runtime |
currentTarget | L'oggetto che elabora attivamente l'oggetto Event con un listener di eventi. |
error | L'errore non rilevato. |
target | L'oggetto LoaderInfo associato al file SWF in cui si è verificato l'errore. |
text | Messaggio di testo dell'errore. |
uncaughtError
per il rilevamento di errori non rilevati. Fornisce inoltre un pulsante che, se viene scelto, genera un errore che viene rilevato dal gestore di errori non rilevati.
Nella funzione di costruzione il codice registra un listener per l'evento uncaughtError
inviato dalla proprietà uncaughtErrorEvents
dell'oggetto LoaderInfo.
Nel metodo uncaughtErrorHandler()
, il codice controlla il tipo di dati della proprietà error
e risponde di conseguenza.
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
per il rilevamento di errori non rilevati.
Nella funzione di costruzione il codice crea un oggetto Loader e registra un listener per l'evento uncaughtError
inviato dalla proprietà uncaughtErrorEvents
dell'oggetto Loader.
Nel metodo uncaughtErrorHandler()
, il codice controlla il tipo di dati della proprietà error
e risponde di conseguenza.
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, 02:44 PM Z