TypeError: Error #1034: 强制转换类型失败:无法将 global@189ac0d1 转换为 mx.core.IFlexDisplayObject。

来源:互联网 发布:js for in 编辑:程序博客网 时间:2024/05/16 09:36

今天遇到一个错误

PopUpManager remove的时候报错

如下

 

 

 

TypeError: Error #1034: 强制转换类型失败:无法将 global@189ac0d1 转换为 mx.core.IFlexDisplayObject。
 at Function/<anonymous>()[D:\hexin\workplace_aisvoyage\sailing\flex_src\com\maphao\sailing\flex\common\sys\pm\ChangeInitPwd.mxml:51]
 at flash.events::EventDispatcher/dispatchEventFunction()
 at flash.events::EventDispatcher/dispatchEvent()
 at flash.net::URLLoader/onComplete()

 

在网上找资料受是flex4的一个bug 然后处理方法参考如下..

 

http://hi.baidu.com/stupid_deer/blog/item/591cdedb381f32f839012f90.html

 

不过这样不好 因为组件只visible了 如果组件很多 那么内存占用会很多

 

后来无意发现一种解决方法 也就是把关闭组件单独写成一个方法 然后在其他需要关闭组件的地方调用这个方法即可解决这个问题...

 

如:

private function closeWindow():void {  PopUpEffect.Hide(this);}


 

 

PopUpEffect.as代码如下

 

package com.maphao.sailing.flex.common.sys.tool{import flash.display.DisplayObject;import mx.core.FlexGlobals;import mx.core.IFlexDisplayObject;import mx.effects.Blur;import mx.events.TweenEvent;import mx.managers.PopUpManager;public class PopUpEffect{public function PopUpEffect(){}/** * 弹出窗体 * addPopUp的parent 定位顶层容器 */ public static function Show(control:IFlexDisplayObject,modal:Boolean=true):void{var mShowEffect:Blur=new Blur();mShowEffect.blurXFrom=255;mShowEffect.blurYFrom=255;mShowEffect.blurXTo=0;mShowEffect.blurYTo=0;mShowEffect.target= control;mShowEffect.duration=300;PopUpManager.addPopUp(control,DisplayObject(FlexGlobals.topLevelApplication),modal);PopUpManager.centerPopUp(control);mShowEffect.play();}/** * 关闭窗体 */ public static function Hide(control:IFlexDisplayObject):void{var mHideEffect:Blur=new Blur();mHideEffect.blurXFrom=0;mHideEffect.blurYFrom=0;mHideEffect.blurXTo=255;mHideEffect.blurYTo=255;mHideEffect.addEventListener(TweenEvent.TWEEN_END,function():void{PopUpManager.removePopUp(control);});mHideEffect.duration=300;mHideEffect.target=control;mHideEffect.play();}}}


 

需要关闭窗体的地方调用closeWindow()这个方法即可...