系统需要用JMS来实现消息提醒,类似于QQ的消息提醒,最初只是一个简单的文件扫描,弹出窗口是一个组件A,每此都实例化一个新的A弹出,点击A上的查看按钮后移除组件A。但是二期定制查询也用到了消息,这就需要连续弹出组件A,弹出三次组件A后flex就报下面的异常:
RangeError: Error #2006: 提供的索引超出范围。 at flash.display::DisplayObjectContainer/addChildAt() at mx.managers::SystemManager/http://www.adobe.com/2006/flex/mx/internal::rawChildren_addChildAt()[C:\autobuild\galaga\frameworks\projects\framework\src\mx\managers\SystemManager.as:2175] at mx.managers::SystemManager/addChild()[C:\autobuild\galaga\frameworks\projects\framework\src\mx\managers\SystemManager.as:1685] at mx.managers::PopUpManagerImpl/addPopUp() at mx.managers::PopUpManager$/addPopUp() at module.portal.desktop::MenuComponent/showSubMenu()[E:\flexworkplace\tpl\src\module\portal\desktop\MenuComponent.mxml:210]
在网上搜了下,原来出现该错误的原因是:PopUpManager不能很好的控制添加到其内控件的层级。每次都addPopUp 到最顶层,程序也不知道到底要增加到多少,最多三次就出现这个错误。
解决方法如下:
if(messageComponent.parent==null){ messageComponent.x=Application.application.width-messageComponent.width; messageComponent.y=Application.application.height-messageComponent.height; PopUpManager.addPopUp(messageComponent,Application.application as DisplayObject,false); }else{ PopUpManager.bringToFront(messageComponent); }
messageComponent是要弹出的消息组件。