2013-08-03 2 views
5

По какой-то причине, когда я пытаюсь получить общее свойство из Worker (в AS3), результат всегда равен нулю. То есть, я отправляю значение Worker с использованием setSharedProperty(), когда я его извлекаю с помощью getSharedProperty(), он всегда возвращает undefined/null.Работник получает 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

У меня нет ответа на ваш м ain, но проблема с Flash 11.7, не распознающая классы, может быть связана с вашей версией playerglobal.SWC или SWF, которая компилируется. Текущая версия SWF кажется 19, вам может потребоваться указать тот, который включает в себя функциональность «Рабочий». –

+0

А, спасибо за это. После обновления FlashDevelop (который также обновляет Flex и AIR SDK), он теперь компилируется для 11.7. Однако основная проблема сохраняется. – puggsoy

+0

Добавить 'trace (_worker.getSharedProperty (" message "))' right after '_worker.setSharedProperty (" message "," test ")'. Вы тогда получаете собственность? Если нет, нет необходимости даже обсуждать функцию '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 Debugger 14,0,0,125 и FlashDevelop 4.6.1.30 и получили ожидаемый результат:

[Starting debug session with FDB] 
Created Worker 2 
test 

Помните, что любой элемент не уточненный в вашей отладки цепи (SDK/проигрыватель/отладчик) может привести к проблемам для отладки рабочие

+1

А, это полезно знать! В настоящее время я больше не использую Flash, но я все равно ценю ваш ответ! Поскольку нет ничего лучше, я полагаю, что я отметю это, чтобы показать, что проблема решена, даже если это не технически отвечает на вопрос (это просто уведомляет меня об исправлении). – puggsoy

Смежные вопросы