我有一個加載另一個swf文件(作爲在Flex 3.2 SDK中編寫和編譯的模塊)的Flex 4.5.1應用程序。在mx.core.FlexModuleFactory中非法覆蓋FlexModuleFactory
3.2 swf文件被加載時,我得到了非法覆蓋錯誤(請參閱標題)。
這是甚至允許或加載模塊必須編譯相同的版本?
如果是這樣,你能解釋爲什麼嗎?
我有一個加載另一個swf文件(作爲在Flex 3.2 SDK中編寫和編譯的模塊)的Flex 4.5.1應用程序。在mx.core.FlexModuleFactory中非法覆蓋FlexModuleFactory
3.2 swf文件被加載時,我得到了非法覆蓋錯誤(請參閱標題)。
這是甚至允許或加載模塊必須編譯相同的版本?
如果是這樣,你能解釋爲什麼嗎?
當類不正確地重寫父類函數時發生IllegalOverride錯誤。這方面的一個例子是,如果你擴展了Sprite類並創造了這個功能:
override public function addChild(value:Number):DisplayObject
{
....
}
這是一個非法的覆蓋,因爲該方法的簽名是不一樣的(它需要接受一個DisplayObject,而不是一個號碼)。
FlexModuleFactory最有可能在3.2和4.5之間變化。如果在父SWF中使用FlexModuleFactory,則其定義存在於ApplicationDomain中。如果將子SWF加載到同一個ApplicationDomain中,並且子SWF包含擴展FlexModuleFactory的類,則它將使用ApplicationDomain中已存在的4.5版本,而不是使用編譯該子代的3.2版本。
您可以通過將您的子SWF加載到新的ApplicationDomain中來解決此問題,這意味着它不會共享父SWF中的任何類定義。
感謝您的回答。我發現這個線程http://stackoverflow.com/questions/4056686/loading-flex-modules-compiled-with-flex-4-sdk-into-an-application-compiled-with基本上說,這是可能的加載一個寫入的版本小於或等於您的主應用程序編譯的sdk版本的模塊。真的嗎? – kkudi 2012-01-16 17:34:03
是的,但是,您必須對模塊進行沙箱處理,以避免您目前遇到的錯誤。這是通過將它們加載到它們自己的ApplicationDomain中完成的。 – shanethehat 2012-01-16 17:58:16
謝謝,我認爲它的工作! – kkudi 2012-01-16 19:00:00