2013-08-03 50 views
5

Vì một số lý do, khi tôi cố gắng nhận một thuộc tính được chia sẻ từ một số Worker (trong AS3), kết quả luôn là rỗng. Tức là, tôi gửi một giá trị cho một số Worker sử dụng setSharedProperty(), khi tôi truy xuất giá trị đó bằng cách sử dụng getSharedProperty(), giá trị này luôn trả về undefined/null.Công nhân bị vô hiệu khi truy xuất thuộc tính được chia sẻ

Dưới đây là một thử nghiệm đơn giản để tôi thiết lập:

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); 
     } 

    } 

} 

Khi tôi theo dõi message, kết quả là null. Mặc dù mục tiêu chính của tôi là tạo một ứng dụng AIR, tôi nhận được kết quả tương tự cho dù tôi đang biên soạn AIR (3.7) hoặc Flash Player (11.6, vì một lý do nào đó mà 11.7 không nhận ra flash.system.Worker là một lớp hợp lệ) .

Tôi đang biên soạn bằng Flex SDK, thông qua FlashDevelop. Có ai biết những gì sai, có lẽ tôi đã bỏ lỡ một cái gì đó trong mã của tôi?

+1

Tôi không có câu trả lời cho bạn vấn đề ain, nhưng vấn đề với Flash 11.7 không nhận ra các lớp học có thể là do playerglobal.SWC của bạn hoặc phiên bản SWF đang được biên dịch. Phiên bản SWF hiện tại có vẻ là 19, bạn có thể cần phải chỉ định phiên bản có chức năng 'Worker'. –

+0

Ah, cảm ơn vì điều đó. Sau khi cập nhật FlashDevelop (mà cũng cập nhật các Flex và AIR SDK), nó bây giờ biên dịch cho 11,7. Tuy nhiên, vấn đề chính vẫn tồn tại. – puggsoy

+0

Thêm 'dấu vết (_worker.getSharedProperty (" message "))' ngay sau '_worker.setSharedProperty (" message "," test ")'. Bạn có được tài sản sau đó không? Nếu không, thậm chí không cần phải thảo luận về hàm 'initWorker', vì chúng ta có thể xác định được vấn đề bắt đầu trước đó. –

Trả lời

1

FlashDevelop hiện có vẻ như đã hỗ trợ hoàn toàn cho các công nhân gỡ lỗi thực sự không phải là trường hợp trên các phiên bản cũ hơn (bạn không thể phá vỡ hoặc theo dõi bên trong công nhân). AIR SDK nhân viên hỗ trợ cũng đã tiến triển (Tôi nhớ mọi thứ làm việc trong phiên bản sẽ phá vỡ trong phiên bản debug) tôi chỉ biên dịch lại mẫu của bạn với AIR SDK 14 phát hành (14.0.0.110)

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

và sửa lỗi nó với Shockwave Flash Debugger 14,0,0,125 và FlashDevelop 4.6.1.30 và nhận được kết quả mong đợi:

[Starting debug session with FDB] 
Created Worker 2 
test 

Ghi chú rằng bất kỳ yếu tố không up-to-date trong chuỗi gỡ lỗi của bạn (sdk/DVD/debugger) có thể gây ra vấn đề cho việc gỡ lỗi công nhân

+1

Ah, đó là điều tốt để biết! Tôi hiện không sử dụng Flash nhiều nữa, nhưng tôi đánh giá cao câu trả lời của bạn đều giống nhau! Vì không có gì tốt hơn để làm tôi cho rằng tôi sẽ đánh dấu điều này để cho thấy rằng vấn đề được giải quyết, ngay cả khi điều này không trả lời một cách kỹ thuật câu hỏi (nó chỉ đơn giản là thông báo cho tôi về một sửa chữa). – puggsoy