代码:
- <?xml version="1.0" encoding="utf-8"?>
-
- <mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009"
-
- xmlns:s="library://ns.adobe.com/flex/spark"
-
- xmlns:mx="library://ns.adobe.com/flex/mx" layout="absolute" width="400" height="300">
-
- <fx:Declarations>
-
- <!-- 将非可视元素(例如服务、值对象)放在此处 -->
-
- </fx:Declarations>
-
- <fx:Script>
-
- <!--[CDATA[
-
- import mx.controls.Alert;
-
- private function init():void
-
- {
-
- Alert.show(this.parentApplication.test,"你",Alert.OK,this);
-
- }
-
- ]]-->
-
- </fx:Script>
-
- <s:Button x="60" y="48" label="按钮" click="init();"/>
-
- </mx:Module>
出错信息:
- TypeError: Error #1009: 无法访问空对象引用的属性或方法。
-
- at mx.managers::PopUpManagerImpl/http://www.adobe.com/2006/flex/mx/internal::createModalWindow()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\PopUpManagerImpl.as:686]
-
- at mx.managers::PopUpManagerImpl/addPopUp()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\PopUpManagerImpl.as:401]
-
- at mx.managers::PopUpManager$/addPopUp()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\PopUpManager.as:193]
-
- at mx.controls::Alert$/show()[E:\dev\4.x\frameworks\projects\framework\src\mx\controls\Alert.as:618]
-
- at com.pilihou.modules::Test/init()[E:\study\TryModule\src\com\pilihou\modules\Test.mxml:13]
-
- at com.pilihou.modules::Test/___Test_Button1_click()[E:\study\TryModule\src\com\pilihou\modules\Test.mxml:17]
错误修改方案:
Module域
通常将模块载入一个子域,那么模块里面的类定义都不是application域的。比如第一个模块载入了类PopUpManager,那么整合 Application中,它就成了PopUpManager的拥有者,因为像这种manager都是单例的,如果另外一个模块稍后要使用这个 PopUpManager,就会引发运行时异常。
解决办法就是确保这些managers,比如PopUpManager and DragManager或者其他一些共享的服务 是在application中定义的,这样就能确保所有模块都能够使用。在main Application中:
- import mx.managers.PopUpManager;
-
- import mx.managers.DragManager;
-
- private var popUpManager:PopUpManager;
- private var dragManager:DragManager;