AIRのワーカーに問題があります。非プリミティブワーカーでファイルを開こうとすると、セキュリティエラーが発生します。原始的なワーカーで同じコードを試してみると、うまく機能します。別のswfをロードし、2番目のワーカーを作成するときにそのバイトを渡します。
まず、URLLoader(2番目のワーカーのコード)を試してみました:
// Loading XML test
var loader:URLLoader = new URLLoader(new URLRequest('app:/config/generator/galaxy.xml'));
loader.addEventListener(Event.COMPLETE, function(evt:Event):void
{
// Trace
CEThreadDebugger.log(XML(loader.data).toString());
});
loader.addEventListener(IOErrorEvent.IO_ERROR, function(evt:IOErrorEvent):void
{
CEThreadDebugger.log(evt.text, CEThreadDebugger.ERROR);
});
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function(evt:SecurityErrorEvent):void
{
CEThreadDebugger.log(evt.text, CEThreadDebugger.ERROR);
});
このエラーが発生します:
[LOG]ERROR->Error #2048: Security sandbox violation: app:/SombresCieux.swf cannot load data from app:/config/generator/galaxy.xml.
それから私はファイルで試しました:
var file:File = File.applicationDirectory.resolvePath('config/generator/galaxy.xml');
var stream:FileStream = new FileStream();
stream.open(file, FileMode.READ);
var xml:XML = XML(stream.readUTFBytes(stream.bytesAvailable));
stream.close();
そして、私はこのエラーを受け取ります(私のコードは_mainToWorkerメソッドにあります):
[LOG]INFO->Error #0 : SecurityError -> file
SecurityError: file
at flash.filesystem::File$/initAppResourceDir()
at flash.filesystem::File$/get appResourceDirectoryPath()
at flash.filesystem::File$/get applicationDirectory()
at generator::Generator/_mainToWorker()
at engine.generic.system.concurrency::CEThreadMain/Evt_mainToWorker()
エラーはこの行だけから発生していることに気づきました:
var file:File = File.applicationDirectory.resolvePath('config/generator/galaxy.xml');
つまり、原始的なワーカー(メインアプリ)では機能しますが、スレッドでは機能しません...ワーカーはシステムのファイルにアクセスしたり、ファイルを読み込んだりできませんか?それは非常に大きな制限です...
返信ありがとうございます!