2013-10-22 89 views
0

我正在加載一個.swf文件,並試圖根據其中的嵌入式xml文檔找到一個類。我已經無休止地看到了這個問題,並且每個人都說「你的類不公開」,「你的類名干擾了你的文檔類」或者「你沒有使用相同的ApplicationDomain」,其中沒有一個是真的。這裏是我的代碼:ReferenceError:Error#1065:變量TestMain未定義

在CoCMain.as,具有CoCMod.fla:

private function pluginLoadingComplete(e:Event):void { 
     var testXML:XML = new XML(new e.target.content.description); 
     trace(e.target.applicationDomain.hasDefinition("blah.blaah.testPlugin.TestMain"));//returns false 
     trace(ApplicationDomain.currentDomain.hasDefinition("blah.blaah.testPlugin.TestMain"));//returns false 
     trace(testXML.main[0]);//returns blah.blaah.testPlugin.TestMain 
     var pluginClass:Class = e.target.applicationDomain.getDefinition(testXML.main[0]) as Class;//error here 
    } 

而且在TestMain.as,具有TestMod.fla(這是SWF我裝):

package blah.blaah.testPlugin { 

    public class TestMain { 
     public function TestMain():void { 
      super(); 
     }  

     public function onEnable():void { 
      trace("blah"); 
     } 
    } 
} 

而在TestMod.fla的幀1:

import blah.blaah.testPlugin.TestMain; 

[Embed(source = 'main.xml', mimeType = "application/octet-stream")] 
const description:Class; 

的xml文件:

<mod> 
    <name>Test Mod</name> 
    <description>Please ignore</description> 
    <author>Bleachisback</author> 
    <version>1.0</version> 
    <main>blah.blaah.testPlugin.TestMain</main> 
</mod> 

我得到的錯誤:

ReferenceError: Error #1065: Variable TestMain is not defined. 
    at flash.system::ApplicationDomain/getDefinition() 
    at me.bleachisback.cocMod::CoCMain/pluginLoadingComplete() 

回答

0

這聽起來像一個類似的問題我遇到過 - 在你試圖從描述性名稱動態地創建一個實例。

如果您沒有顯式實例化目標類的實例,編譯器將不會在目標類中包含目標類,因此該類不存在(因此您的錯誤)。所以,你可以添加一行

var xyz:TestMain = new TestMain(); 

但那種失敗的目的...

您可以強制編譯器使用includes指令,包括類,用類列表必須被包括在內。

+0

非常感謝!我終於明白了這一點,是的,它確實有點失敗了......我最終只是在主時間線上創建了一個類變量,而主類變爲了主類。 – user2885503

0

你試過這個嗎?

var pluginClass:Class = e.target.applicationDomain.getDefinition(testXML.main.text().toString()) as Class;