Pacote | flash.events |
Classe | public class UncaughtErrorEvent |
Herança | UncaughtErrorEvent ErrorEvent TextEvent Event Object |
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 10.1, AIR 2 |
try..catch
ou quando um objeto ErrorEvent é despachado sem ouvintes registrados. A funcionalidade de evento de erro não detectado muitas vezes é descrita como "controlador de erro global".
O objeto UncaughtErrorEvents que despacha o evento é associado a um objeto LoaderInfo ou a um objeto Loader. Use as seguintes propriedades para acessar uma instância UncaughtErrorEvents:
-
LoaderInfo.uncaughtErrorEvents
: para detectar erros não detectados no código definido no mesmo SWF. -
Loader.uncaughtErrorEvents
: para descobrir erros não detectados no código definido no SWF carregado por um objeto Carregador.
Quando um evento uncaughtError
acontece, mesmo se o evento for controlado, a execução não continua na pilha de chamadas que causou o erro. Se o erro for um erro síncrono, nenhum código que permanecer na função em que o erro aconteceu será realizado. Consequentemente, é provável que quando um evento de erro não detectado ocorre, o seu aplicativo esteja em um estado instável. Uma vez que pode haver muitas causas para um erro não detectado, é impossível predizer qual funcionalidade está disponível. Por exemplo, o seu aplicativo pode ser capaz de realizar operações de rede ou operações de arquivo. Contudo, essas operações não estão necessariamente disponíveis.
Quando um SWF carrega o outro, os eventos uncaughtError
sobem e descem novamente pela hierarquia LoaderInfo. Por exemplo, suponha que A.swf carrega B.swf utilizando uma instância Loader. Se um erro não detectado ocorrer em B.swf, um evento uncaughtError
é despachado a objetos Loader e LoaderInfo na seguinte sequência:
- (Fase de captura) LoaderInfo de A.swf
- (Fase de captura) Loader em A.swf
- (Fase de destino) LoaderInfo de B.swf
- (Fase de balão) Loader em A.swf
- (Fase de balão) LoaderInfo de A.swf
Uma propriedade uncaughtErrorEvents
do objeto Loader a nunca despacha um uncaughtErrorEvent
na fase de destino. Ele só despacha o evento nas fases de captura e bubbling.
Como outro evento sobe ou desce, chamar stopPropagation()
ou stopImmediatePropagation()
para o evento de ser despachado para qualquer outro ouvinte, com uma diferença importante. Um objeto UncaughtErrorEvents do objeto Loader é tratado como um par do objeto LoaderInfo.uncaughtErrorEvents
do SWF carregado para fins de propagação de evento. Se um ouvinte registrado com um daqueles objetos chamar o método stopPropagation()
, os eventos ainda serão despachados a outros ouvintes registrados com esse objeto UncaughtErrorEvents e a ouvintes registrados com o seu objeto de parceiro UncaughtErrorEvents antes que a propagação termine. O método stopImmediatePropagation()
ainda evita que eventos sejam despachados a todos os ouvintes adicionais.
Quando o conteúdo é executado em uma versão de depurador do tempo de execução, como a versão de depurador do Flash Player ou o AIR Debug Launcher (ADL), uma caixa de diálogo de erro não detectado é exibida quando um erro não detectado ocorrer. Para essas versões do tempo de execução, a caixa de diálogo de erro aparece mesmo quando um ouvinte é registrado para o evento uncaughtError
. Para evitar que a caixa de diálogoapareça nessa situação, chame o método preventDefault()
do objeto UncaughtErrorEvent.
Se o conteúdo carregado por um objeto Loader for um arquivo AVM1 (ActionScript 2) SWF, os erros não detectados no arquivo AVM1 SWF não resultarão em um evento uncaughtError
. Além disto, os erros de JavaScript em conteúdo de HTML carregado em um objeto HTMLLoader (inclusive um controle Flex HTML) não resultam em um evento uncaughtError
.
Elementos da API relacionados
Propriedade | Definido por | ||
---|---|---|---|
bubbles : Boolean [somente leitura]
Indica se um evento é do tipo bubbling. | Event | ||
cancelable : Boolean [somente leitura]
Indica se o comportamento associado ao evento pode ser impedido. | Event | ||
constructor : Object
Uma referência ao objeto de classe ou à função de construtor de uma determinada ocorrência de objeto. | Object | ||
currentTarget : Object [somente leitura]
O objeto que está processando ativamente o objeto Event com um ouvinte de evento. | Event | ||
error : * [somente leitura]
O objeto de erro associado ao erro não detectado. | UncaughtErrorEvent | ||
errorID : int [somente leitura]
Contém o número de referência associado ao erro específico. | ErrorEvent | ||
eventPhase : uint [somente leitura]
A fase atual no fluxo de eventos. | Event | ||
target : Object [somente leitura]
O destino de evento. | Event | ||
text : String
Para um evento textInput, o caractere ou string inserida pelo usuário. | TextEvent | ||
type : String [somente leitura]
O tipo de evento. | Event |
Método | Definido por | ||
---|---|---|---|
UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)
Cria um objeto de UncaughtErrorEvent que contém informações sobre um evento uncaughtError. | UncaughtErrorEvent | ||
[substituir]
Cria uma cópia do objeto UncaughtErrorEvent e define o valor de cada propriedade para corresponder ao do original. | UncaughtErrorEvent | ||
Uma função de utilitário para implementar o método toString() em classes ActionScript 3.0 Event personalizadas. | Event | ||
Indica se um objeto tem uma propriedade especificada definida. | Object | ||
Verifica se o método preventDefault() foi chamado no evento. | Event | ||
Indica se uma ocorrência da classe Object está na cadeia de protótipos do objeto especificado como o parâmetro. | Object | ||
Cancela um comportamento padrão de evento se esse comportamento puder ser cancelado. | Event | ||
Indica se a propriedade especificada existe e é enumerável. | Object | ||
Define a disponibilidade de uma propriedade dinâmica para operações de repetição. | Object | ||
Impede o processamento de qualquer ouvinte de evento no nó atual e qualquer nó subsequente no fluxo de eventos. | Event | ||
Impede o processamento de algum ouvinte de evento em nós subsequentes ao nó atual no fluxo de eventos. | Event | ||
Retorna a representação da string deste objeto, formatado segundo as convenções específicas para a localidade. | Object | ||
[substituir]
Retorna uma string que contém todas as propriedades do objeto UncaughtErrorEvent. | UncaughtErrorEvent | ||
Retorna o valor primitivo do objeto especificado. | Object |
Constante | Definido por | ||
---|---|---|---|
UNCAUGHT_ERROR : String = "uncaughtError" [estático]
Define o valor da propriedade type de um objeto de evento uncaughtError. | UncaughtErrorEvent |
error | propriedade |
error:*
[somente leitura] Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 10.1, AIR 2 |
O objeto de erro associado ao erro não detectado. Normalmente, o tipo de dados deste objeto é um dos seguinte:
- Uma instância de erro (ou uma das suas subclasses), se o erro não detectado for um erro síncrono criado pela instrução
throw
, como um erro que pode ter sido detectado usandotry..catch
- Uma instância ErrorEvent (ou uma das suas subclasses), se o erro não detectado for um erro assíncrono que despacha um evento de erro quando o erro ocorre
Contudo, a propriedade error
pode ser potencialmente um objeto de qualquer tipo de dados. ActionScript não precisa que a instrução throw
seja usada só com objetos Error. Por exemplo, o seguinte código é válido tanto no tempo de compilação como no tempo de execução:
throw new Sprite()
Se essa instrução throw
não for detectada pelo bloqueio try..catch
, a instrução throw
provoca um evento uncaughtError
. Neste caso, a propriedade error
do objeto UncaughtErrorEvent que é despachado é o objeto Sprite que é construído na instrução throw
.
Consequentemente, no seu ouvinte uncaughtError
, você deve verificar o tipo de dados da propriedade error
. O exemplo abaixo demonstra esta verificação:
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 a propriedade error
contém uma instância Error (ou subclasse de Error), as informações sobre o erro disponíveis variam dependendo da versão do runtime no qual o conteúdo está sendo executado, conforme a seguir:
Em uma versão de depuração do runtime, como a versão de depuração do Flash Player ou o AIR Debug Launcher (ADL):
- O método
Error.getStackTrace()
retorna a pilha de chamada que levou ao erro Error.message
contém o texto completo da mensagem de texto
- O método
Em uma versão de não depuração do runtime:
- O método
Error.getStackTrace()
retorna a pilha de chamada que levou ao erro. No entanto, as informações de pilha de chamada não incluem os nomes dos arquivos de origem ou números de linha. - A propriedade
Error.message
contém uma versão curta da mensagem de erro, que normalmente é uma combinação das propriedadesError.errorID
eError.name
- O método
Em uma versão de não depuração do runtime (Flash Player 11.4 ou anterior e AIR 1.4 ou anterior):
- O método
Error.getStackTrace()
retornanull
- A propriedade
Error.message
contém uma versão curta da mensagem de erro, que normalmente é uma combinação das propriedadesError.errorID
eError.name
- O método
Todas outras propriedades e métodos da classe Erro estão disponíveis em todas as versões do tempo de execução.
Observe que, se a propriedade error
é uma instância ErrorEvent, as informações de pilha de chamada nunca estarão disponíveis.
Implementação
public function get error():*
UncaughtErrorEvent | () | Construtor |
public function UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 10.1, AIR 2 |
Cria um objeto UncaughtErrorEvent que contém informações sobre um evento uncaughtError
.
type:String (default = NaN ) — O tipo de evento.
| |
bubbles:Boolean (default = true ) — Determina se o objeto Event participa do estágio de bubbling do fluxo de eventos. Ouvintes de eventos podem acessar essas informações por meio da propriedade bubbles herdada.
| |
cancelable:Boolean (default = true ) — Determina se o objeto Event pode ser cancelado. Ouvintes de eventos podem acessar essas informações por meio da propriedade cancelable herdada.
| |
error_in:* (default = null ) — O objeto associado ao erro que não foi detectado ou controlado (um objeto ErrorEvent ou Error em circunstâncias normais).
|
clone | () | método |
override public function clone():Event
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 10.1, AIR 2 |
Cria uma cópia do objeto UncaughtErrorEvent e define o valor de cada propriedade para corresponder ao do original.
RetornaEvent — Um novo objeto UncaughtErrorEvent com valores de propriedade que correspondem aos do original.
|
toString | () | método |
UNCAUGHT_ERROR | Constante |
public static const UNCAUGHT_ERROR:String = "uncaughtError"
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 10.1, AIR 2 |
Define o valor da propriedade type
de um objeto de evento uncaughtError
.
Observação: se, em um bloco try, há um distribuidor de eventos que chama o manipulador de eventos, o bloco catch não identifica o erro caso seja inserido no manipulador de eventos. Qualquer erro inserido depois disso poderá ser identificado em LoaderInfo.uncaughtErrorEvents
.
Esse evento tem as seguintes propriedades:
Propriedade | Valor |
---|---|
bubbles | true |
cancelable | true ; o cancelamento do evento evita que a caixa de diálogo de erro não detectadoapareça em versões do tempo de execução de depurador |
currentTarget | O objeto que está processando ativamente o objeto Event com um ouvinte de evento. |
error | O erro não detectado. |
target | O objeto LoaderInfo associado ao SWF em que o erro aconteceu. |
text | Mensagem de erro de texto. |
uncaughtError
para detectar erros não capturados. Ele também oferece um botão que, quando clicado, lança um erro que é detectado pelo controlador de erros não detectados.
No construtor, o código registra um ouvinte para o evento uncaughtError
despachado pela propriedade uncaughtErrorEvents
do objeto LoaderInfo.
No método uncaughtErrorHandler()
, o código verifica o tipo de dados da propriedade error
e responde de acordo.
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
para detectar erros não capturados.
No construtor, o código cria um objeto Carregador e registra um ouvinte para o evento uncaughtError
despachado pela propriedade uncaughtErrorEvents
do objeto de Carregador.
No método uncaughtErrorHandler()
, o código verifica o tipo de dados da propriedade error
e responde de acordo.
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 } } } }
Wed Jun 13 2018, 11:10 AM Z