Pelo jeito você tem BASTANTE cálculo para fazer hem? rs
Esse erro acontece quando você trava a renderização por mais de 15 segundos.
O que acontece é que não existe renderização direta no Actionscript durante
a execução de um código, só depois dele. Então se houver um loop muito
grande dentro de um bloco de código, por exemplo, o próprio Flash Player
reconhece como um travamento e, para não travar a máquina do usuário, ele
pergunta ao usuário se quer parar de executar seu código.

A solução mais comum para este tipo de problema é dividir o código em blocos
de execução, usando timers ou o próprio enterFrame do Sprite.
Ou então rever o código para descobrir o porque de estar lento e limar
algumas partes, ou executá-las depois ;)

--
Gustavo Y. Kawamoto


2009/12/8 Fredy Gadotti <thief...@gmail.com>

> Olá pessoal,
>
>
> estava refatorando meu código pois ele estava começando a ficar muito
> horrível, ai fui aplicar o padrão Strategy e meu código começou a dar um
> erro que nunca tinha visto antes.
> E procurando no Google, tinha apenas duas páginas comentando sobre isso, e
> nenhuma foi de real ajuda.
>
> Bom, o que fiz para simular o erro.
>
> Eu criei, uma interface com os métodos que eu precisava.
> Na classe onde ia aplicar a estratégia eu criei uma variável do tipo da
> interface e criei um setter para instanciar a classe concreta que aplica
> minha estratégia.
>
> Mais ou menos assim:
>
> *var _strategy:IStrategy;*
> *
> *
> *private function set strategy(value:IStrategy):void {*
> *    _stragety = value;*
> *
> *
> *   createHeaders();               //* talvez o erro seja aqui, mas não
> tenho certeza, será que fica muito pesado chamar dentro do setter? deveria
> fazer como? *creationComplete?*
> *}*
> *
> *
> *private function createHeaders():void {*
> *    _stragety.width = 50;              // *valores ficticios
> *    _strategy.daysGap = 365;       // *valores ficticios
> *    _strategy.view = this;*
> *    _strategy.createHeaders();     *
> *}*
>
>
>
> ai ele vai chamar uma das classes concretas que tem o createHeaders() e ele
> faz um monte de calculo para criar meus cabeçalhos.
> E logo depois de chamar a updateDisplayList, ele dá o pau.
>
> Antes de refatorar, eu criava tudo dinamicamente uma coleção de 3000
> objetos e não dava problema, e todo o código ficava dentro de uma classe com
> if e else encadeados. Simplesmente encapsulei a lógica, e agora mesmo com
> uma coleção de dados pequena e ele dá o erro, com certa de 20 objetos.
>
> *Segue o stack trace:*
>
> Error: Error #1502: Um script foi executado por mais tempo que o período
> limite padrão de 15 segundos.
> at
> mx.managers.layoutClasses::PriorityQueue/removeSmallestChild()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\managers\layoutClasses\PriorityQueue.as:214]
>  at
> mx.managers::LayoutManager/validateClient()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:895]
> at
> mx.core::UIComponent/validateNow()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\UIComponent.as:5550]
>  at
> mx.core::Container/createOrDestroyScrollbars()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\Container.as:4481]
> at
> mx.core::Container/createScrollbarsIfNeeded()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\Container.as:4349]
>  at
> mx.core::Container/createContentPaneAndScrollbarsIfNeeded()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\Container.as:4165]
> at
> mx.core::Container/validateDisplayList()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\Container.as:2702]
>  at
> mx.managers::LayoutManager/validateDisplayList()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:602]
> at
> mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:657]
>  at Function/http://adobe.com/AS3/2006/builtin::apply()
> at
> mx.core::UIComponent/callLaterDispatcher2()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\UIComponent.as:8460]
>  at
> mx.core::UIComponent/callLaterDispatcher()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\UIComponent.as:8403]
>
>
>
>
> Bom, sei que o email ficou um pouco longo, mas agradeceria se alguém
> tivesse alguma sugestão.
>
>
>
>
> Att,
>
> Fredy Gadotti.
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para 
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a