2013-08-03 49 views
5

由於某些原因,當我嘗試從Worker(在AS3中)接收共享屬性時,結果始終爲空。也就是說,我使用setSharedProperty()將值發送到Worker,當我使用getSharedProperty()檢索它時,它總是返回undefined/null工作人員在檢索共享屬性時爲空

這裏有一個簡單的測試,我設置:

package 
{ 
    import flash.display.Sprite; 
    import flash.system.Worker; 
    import flash.system.WorkerDomain; 

    public class Main extends Sprite 
    { 
     private var _worker:Worker; 

     public function Main():void 
     { 
      if (Worker.current.isPrimordial) 
      { 
       initMain(); 
      } 
      else 
      { 
       initWorker(); 
      } 
     } 

     private function initMain():void 
     { 
      _worker = WorkerDomain.current.createWorker(this.loaderInfo.bytes); 

      _worker.setSharedProperty("message", "test"); 
      _worker.start(); 
     } 

     private function initWorker():void 
     { 
      _worker = Worker.current; 

      var message:String = _worker.getSharedProperty("message"); 

      trace(message); 
     } 

    } 

} 

當我跟蹤message,結果爲空。雖然我的主要目標是製作一個AIR應用程序,但無論我是爲AIR(3.7)還是Flash Player(11.6)編譯,我都會得到相同的結果,因爲某些原因,11.7無法將flash.system.Worker識別爲有效的類) 。

我正在使用Flex SDK通過FlashDevelop進行編譯。有人知道什麼是錯的,也許我錯過了我的代碼中的東西?

+1

我沒有對你的答案但是Flash 11.7無法識別類的問題可能是由於您的playerglobal.SWC或正在編譯的SWF版本造成的。目前的SWF版本似乎是19,您可能需要指定一個包含「工作者」功能的版本。 –

+0

啊,謝謝你。更新FlashDevelop(它也更新Flex和AIR SDK)後,它現在編譯爲11.7。但主要問題仍然存在。 – puggsoy

+0

在_worker.setSharedProperty(「message」,「test」)後面加上'trace(_worker.getSharedProperty(「message」))'。那麼你有財產嗎?如果不是,那麼甚至不需要討論'initWorker'函數,因爲我們可以在那之前確定問題。 –

回答

1

FlashDevelop現在似乎完全支持調試工作人員,而舊版本的情況並非如此(您既不能破解也不能在工作人員內部進行跟蹤)。 AIR SDK工人的支持也已取得進展(我記得的東西釋放工作中的調試版本會打破) 我剛重新編譯了樣本與AIR SDK 14日發佈(14.0.0.110)

air14_sdk_win/bin/mxmlc -swf-version=25 -debug=true Main.as 

,並用的Shockwave Flash調試器調試它14,0,0,125和FlashDevelop中4.6.1.30,得到了預期的結果:

[Starting debug session with FDB] 
Created Worker 2 
test 

謹防任何元素沒有達到最新的在你的調試鏈(SDK /播放器/調試器)可能會導致調試問題工人

+1

啊,很高興知道!我目前不再使用Flash,但我很欣賞你的回答!既然沒有什麼比這更好的了,我想我會標記這個來表明問題已經解決,即使這在技術上沒有回答這個問題(它只是告訴我一個修正)。 – puggsoy