2011-04-28 40 views
0

我的应用程序当前包含一些由小组件管理器管理的小组件。当用户点击一个窗口小部件(如辅助部件),小插件管理器加载插件与下面的代码行单独同级应用领域:强制转换加载到其他应用程序域中的对象时的强制转换错误

wgtInfo.load(null, null, null, moduleFactory); //wgtInfo = IModuleInfo 

但是,我无法使用Widget的变量并在稍后发挥作用。我尝试从窗口小部件管理器的窗口小部件列表中找到Helper窗口小部件,并且成功完成。但是,当我尝试种姓从类型IBaseWidget的助手小工具(该接口的所有部件份额)键入HelperWidget,我收到以下错误:

TypeError: Error #1034: Type Coercion failed.....

这是因为类的应用领域尝试使用该助手小部件与Helper Widget的应用程序域不同。我试图通过加载所有部件到同一个应用程序域中加载程序来解决这个:

wgtInfo.load(ApplicationDomain.currentDomain, null, null, moduleFactory); 

我现在碰到下面的错误,每当我尝试加载助手插件:

TypeError: Error #1009: Cannot access a property or method of a null object reference.

我怎样才能将我的Helper小部件加载到可由其他小部件访问的公共应用程序域中?

+0

我在这里有点困惑。但是,猜测是错误不是基于ApplicationDomain,而是基于哪些类正在编译到哪个Module中。 Flex会自动优化SWF中未使用的类;但是你可以用include-libraries编译器参数强制它们。 – JeffryHouser 2011-04-28 18:16:38

回答

0

在尝试了许多解决方案失败后(包括此页面上的其他响应)后,我诉诸另一个事件驱动的解决方案。

我结束了调度自定义事件当辅助部件已经完成装载,通知我的其他部件:

(HelperWidget.mxml)

ViewerContainer.addEventListener(AppEvent.WIDGET_OPEN_TAB, widgetOpenTabHandler); //listen for other widgets to open a tab within the Helper Widget 
ViewerContainer.dispatchEvent(new AppEvent(AppEvent.WIDGET_READY_OPEN_TAB)); //notify other widgets that loading is complete 

我的其他部件侦听此事件,火灾,并在完成后,派发另一个事件(AppEvent.WIDGET_OPEN_TAB)在Helper小部件中执行一个函数。

1

我相信你的问题来自不包含在swf中的类。这是因为如果不用于减小文件大小,Flash不会在swf中的类中进行编译。为了防止出现这种情况,您只需要在该类中创建一个带有帮助类的变量,如下所示:

private var helper:HelperWidget; 

看看是否有帮助。

+0

我打算采用相同的方法(请参阅我对原始问题的评论),但我没有创建未使用的变量,而是建议使用include-libraries编译器参数。 – JeffryHouser 2011-04-28 18:18:12

+0

@ www.Flextras.com,是的,这也是有效的,但如果你有很多东西,那么维护它就太麻烦了。 – 2011-04-28 18:19:06

+0

我不知道为什么编译器参数方法比'伪变量'方法难以维护。 – JeffryHouser 2011-04-28 19:10:53

1

我要重新发布我的'评论'作为一个真正的答案。我猜这个错误不是基于ApplicationDomain,而是基于你正在被编译到你的模块中的哪些类。当Flex编译SWF时,它会自动优化SWF中未使用的类。你可以迫使他们返回到SWF中的两种方法之一:

  1. 使用编译器参数include-libraries强制Flex编译器类添加到您的SWF。
  2. 在您的应用程序中添加一个虚假变量,以便Flex编译器认为它已被使用并将其添加到最终的SWF中。像这样的东西。

    private var myFakeObject:HelperWidth;

相关问题