2015-03-18 2 views
0

Я хочу, чтобы загрузить изображение из рабочего, но я получаю эту ошибку:используя погрузчик с рабочим

* Security Sandbox Violation * Connection to file:///C|/Users/Mudinho/Documents/projetos/as3/Engine/bin/TileSet/testeTileSet.png halted - not permitted from file:///C|/Users/Mudinho/Documents/projetos/as3/Engine/bin/Engine.swf -- Remote SWFs may not access local files.

Worker 2: [Fault] exception, information=SecurityError: Error #2148: SWF file file:///C|/Users/Mudinho/Documents/projetos/as3/Engine/bin/Engine.swf cannot access local resource file:///C|/Users/Mudinho/Documents/projetos/as3/Engine/bin/TileSet/testeTileSet.png. Only local-with-filesystem and trusted local SWF files may access local resources.

я уже поставил -use-сеть = False в настройках компилятора, установите значение параметра «Использовать Сетевые службы» ложь , не работает swf через браузер, debug (Security.sandboxType); печать удаленного

вот мой рабочий код

package { 
    import flash.display.BitmapData; 
    import flash.display.Loader; 
    import flash.display.Sprite; 
    import flash.display.Stage; 
    import flash.events.Event; 
    import flash.net.URLRequest; 
    import flash.system.LoaderContext; 
    import flash.system.MessageChannel; 
    import flash.system.Security; 
    import flash.system.Worker; 
    import flash.system.WorkerDomain; 
    import flash.utils.ByteArray; 
    import starling.core.Starling; 
    import starling.textures.Texture; 
    import starling.utils.AssetManager; 

    /** 
    * ... 
    * @author 
    */ 

    public class SlaveWorker extends Sprite { 
     private var miso:MessageChannel; 
     private var mosi:MessageChannel; 
     private var byteArray:ByteArray; 
     //private var asset:AssetManager; 
     private var loader:Loader; 

     private var asset:AssetManager; 
     private var starling:Starling; 

     private function debug(... arguments):void { 
      if (Worker.current.isPrimordial) { 
       trace("Master[1] : " + arguments); 
      } else { 
       trace("Worker[" + Worker.current.getSharedProperty("worker") + "] : " + arguments); 
      } 
     } 

     public function SlaveWorker(mosi_:MessageChannel, miso_:MessageChannel, byteArray_:ByteArray) { 

      Security.allowInsecureDomain("*"); 
      Security.allowDomain("*"); 

      Security.allowInsecureDomain(Security.pageDomain); 
      Security.allowDomain(Security.pageDomain); 

      debug(Security.sandboxType); 
      miso = miso_; 
      mosi = mosi_; 
      byteArray = byteArray_; 

      //asset = new AssetManager(); 
      mosi.addEventListener(Event.CHANNEL_MESSAGE, onMosi); 
      //asset = new AssetManager(); 
      addEventListener(Event.ADDED_TO_STAGE, onAdded); 
      loader = new Loader(); 
     } 

     private function onAdded(e:Event):void { 
      removeEventListener(Event.ADDED_TO_STAGE, onAdded); 
      //starling = new Starling(Inutil, this.stage); 
     } 

     private var archiveType:String; 
     private var archiveName:String; 

     private function onMosi(evt:Event):void { 
      var command:* = mosi.receive(); 
      debug(command); 
      if (command is String) { 
       if (command == "loadArchive") { 

        var type:* = mosi.receive(); 
        var archive:* = mosi.receive(); 

        debug(type); 

        debug(archive); 

        if (type == "texture") { 
         archiveType = type; 
         archiveName = archive; 
         var _sair:Boolean = false; 
         while (!_sair) { 
          var pos:int = archiveName.search("/"); 
          if (pos < 0) 
           _sair = true; 
          else 
           archiveName = archiveName.slice(pos + 1); 
          debug(archiveName); 
         } 
         archiveName = archiveName.slice(0, archiveName.search(".") - 1); 
         debug("arquivo a carregar " + archive); 
         var lc:LoaderContext = new LoaderContext(); 
         lc.checkPolicyFile = false; 

         loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onArchiveLoaded); 

         //asset.enqueue(archive); 
         //asset.loadQueue(onArchiveLoaded); 
         loader.load(new URLRequest(archive), lc); 
         debug("lol"); 
        } 
       } 
      } 
     } 

     private function onArchiveLoaded(e:Event):void { 
      var _loader:Loader = e as Loader; 
      //if (value == 1.0) { 
      debug("carregado " + _loader.contentLoaderInfo.bytesLoaded + " bytes"); 
      if (archiveType == "texture") { 
       //var texture:Texture = asset.get 
       debug("data type" + _loader.contentLoaderInfo.contentType); 
       byteArray.clear(); 
       //byteArray.writeObject(asset.getTexture(archiveName)); 
       var bitmapData:BitmapData = _loader.content as BitmapData; 
       byteArray.writeObject(Texture.fromBitmapData(bitmapData)); 
       miso.send("STATUS"); 
       miso.send("COMPLETE"); 
      } 
      //} 
     } 
    } 

} 

-Edit забыл сказать уже дают работника giveAppPrivileges пометка уаг bgWorker: работник = WorkerDomain.current.createWorker (swfBytes, правда);

+0

Почему вы используете работника для загрузки данных? Это уже асинхронно, возможно, вам стоит попробовать загрузить основной SWF. Кроме того, ошибка указывает, что ваш рабочий класс работает в другой песочнице, чем основное приложение, и не имеет доступа к локальной файловой системе. IIRC это должно быть исправлено путем загрузки в основном классе, а не путем изменения песочницы для рабочего. – Vesper

+0

, потому что я сделаю тяжелую обработку с изображением в рабочем месте, основное приложение не будет использовать изображение, только результат, и я не хочу тратить время на передачу изображения, чтобы занять основное время обработки приложения. –

ответ

1

Касательно вашего сообщения об ошибке, возможно, вы можете исправить использование флага giveAppPrivileges.

public function createWorker(swf:ByteArray, giveAppPrivileges:Boolean = false):Worker 

giveAppPrivileges: Boolean (по умолчанию = ложь) - указывает на то, должен ли работник быть предоставлены льготы в изолированной программной среде приложения AIR. Этот параметр игнорируется в Flash Player.

+0

уже сделал это, var bgWorker: Worker = WorkerDomain.current.createWorker (swfBytes, true); –

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