2016-04-13 11 views
0

Dosya.browseForOpen ile bir dosya iletişim kutusu açmaya çalışıyorum. Çoğu zaman çalışır, ancak çok nadir durumlarda (toplantılarda olduğu gibi) dosya tarayıcısı sadece görünmez ve engellenmez (modal olmalıdır).Neden browseForOpen, Dosya İletişimini görüntüleyemiyor, ancak geri çağrılırsa açık olduğunu iddia edebilir?

Bu noktada kodu çağıran düğmeye basarsam, "yalnızca bir tane olabilir" şeklinde bir hata alırım.

hiçbir alt pencereleri vardır ve hatta ana penceresini minimize sonra, iletişim dosyaya bulamıyorum, henüz hata açık olduğunda ısrar ediyor. Yukarıdaki kod çağrıldığında düğmeyi devre dışı bırakan bir kod yazdım ve daha sonra herhangi bir olayda bunu etkinleştirir ancak bu hata oluştuğunda düğme kalıcı olarak devre dışı bırakılır.

Dosya tarayıcısı açıkken bile çalışmaya devam eden bir başka 10.000 satırlık kod var. Bunların hiçbiri dosya tarayıcısıyla ilgili görünmüyor, bu yüzden aşağıdaki kodu yeni bir projeye taşıdım, test etmek ve hatayı tekrarlayamadım.

var filter:FileFilter = new FileFilter("Image/Video", "*.jpg;*.png;*.mp4;"); 
var imagesFilter:FileFilter = new FileFilter("jpg/png", "*.jpg;*.png"); 
var docFilter:FileFilter = new FileFilter("mp4", "*.mp4;"); 
var filters:Array = [filter, imagesFilter, docFilter]; 

var fileBrowser:File = File.userDirectory; 
fileBrowser.addEventListener(FileListEvent.SELECT_MULTIPLE, onFileSelected); 
fileBrowser.addEventListener(Event.CANCEL, clean); 
fileBrowser.addEventListener(IOErrorEvent.IO_ERROR, clean); 
fileBrowser.browseForOpen("Select Slides", filters); 

kimse ayrıntılı aramada bir 'samanlıkta iğne' beni kurtarabilecek bir şey biliyor mu? Bu problemi başka hiç kimse yaşadı mı? "Dosya iletişim kutusu açılır, ancak görünür değil" veya "Dosya iletişim kutusu açılmıyor" dahil olmak üzere bu aramanın 30'dan fazla varyasyonu arandığında hiçbir çözüm bulamadım.

Son olarak, bunun engellenmesi gerektiğini iken kullanıcı ana penceresinde ile etkileşim olduğunu veya kapatmak için dosya iletişim kutusu zorlamak için bir yol var? Bir bandajın düzeltilmesi problemin çözülmemesi gerektiği gibi (modal akışı keser, biliyorum, ama bu noktada modal akış zaten bozulur).

GÜNCELLEME:

sorunu bir sınıf kaldırarak ve daha az verimli URLMonitor ile değiştirdikten sonra uzağa gitmiş gibi görünüyor. Eğer kimse neyin yanlış gittiğini çözebilirse, cevabınızı eksiksiz olarak işaretleyeceğim. kaldırdım sınıf tamamen alakasız gibiydi ama kodu gösterecektir: Raja Jaganathan aşina

package reuse.Network 
{ 
    import flash.desktop.NativeApplication; 
    import flash.events.Event; 
    import flash.events.EventDispatcher; 
    import flash.events.IOErrorEvent; 
    import flash.events.StatusEvent; 
    import flash.events.TimerEvent; 
    import flash.net.URLLoader; 
    import flash.net.URLLoaderDataFormat; 
    import flash.net.URLRequest; 
    import flash.utils.Timer; 

    import air.net.URLMonitor; 

    [Event(name="networkStatusChanged", type="reuse.Network.CheckInternetEvent")] 
    public class NetStatusMonitor extends EventDispatcher 
    { 
     private var url:String; 
     private var urlMonitor:URLMonitor; 

     public function NetStatusMonitor(url:String = 'http://www.adobe.com') 
     { 
      super(); 
      this.url = url; 
     } 

     protected function onNetwork_ChangeHandler(event:Event):void 
     { 
      checkWebsite(url, dispatchStatus); 
     } 

     /** 
     * Checks a specific website for connectivity. 
     * @param uri URI of the website to check for a response from 
     * @param result Function which accepts a bool as a response. 
     * @param idleTimeout How many milliseconds to wait before timing out 
     */ 
     public function checkWebsite(uri:String, result:Function, idleTimeout:Number = NaN):void 
     { 
      var timeout:Timer; 
      var request:URLRequest = new URLRequest(uri); 

      if(!isNaN(idleTimeout)) 
      { 
       request.idleTimeout = idleTimeout; 

       timeout = new Timer(request.idleTimeout + 1000, 1); 
       timeout.addEventListener(TimerEvent.TIMER_COMPLETE, failed); 
       timeout.start(); 
      } 

      var loader:URLLoader = new URLLoader(); 
      loader.dataFormat = URLLoaderDataFormat.TEXT; 
      loader.addEventListener(Event.COMPLETE, complete); 
      loader.addEventListener(IOErrorEvent.IO_ERROR, failed); 
      loader.load(request); 

      function complete():void 
      { 
       result(true); 
       cleanup(); 
      } 

      function failed(e:*):void 
      { 
       result(false); 
       cleanup(); 
      } 

      function cleanup():void 
      { 
       if(timeout) 
       { 
        timeout.stop(); 
        timeout.removeEventListener(TimerEvent.TIMER_COMPLETE, failed); 
        timeout = null; 
       } 

       loader.close(); 
       loader.removeEventListener(Event.COMPLETE, complete); 
       loader.removeEventListener(IOErrorEvent.IO_ERROR, failed); 
       loader = null; 
      } 
     } 

     public function start():void 
     { 
      checkWebsite(url, dispatchStatus, 5000); 

      if(!NativeApplication.nativeApplication.hasEventListener(Event.NETWORK_CHANGE)) 
       NativeApplication.nativeApplication.addEventListener(Event.NETWORK_CHANGE, onNetwork_ChangeHandler); 

      if(urlMonitor == null) 
      { 
       var request:URLRequest = new URLRequest(url); 
       urlMonitor = new URLMonitor(request); 
       urlMonitor.pollInterval = 30; 
      } 

      if(!urlMonitor.hasEventListener(StatusEvent.STATUS)) 
       urlMonitor.addEventListener(StatusEvent.STATUS, onNetStatus_ChangeHandler); 

      if(!urlMonitor.running) 
       urlMonitor.start(); 
     } 

     public function stop():void 
     { 
      if(urlMonitor) 
      { 
       if(urlMonitor.running) 
        urlMonitor.stop(); 

       if(urlMonitor.hasEventListener(StatusEvent.STATUS)) 
        urlMonitor.removeEventListener(StatusEvent.STATUS, onNetStatus_ChangeHandler); 

       urlMonitor = null; 
      } 
     } 

     private function onNetStatus_ChangeHandler(event:StatusEvent):void 
     { 
      dispatchStatus(urlMonitor.available); 
     } 

     private function dispatchStatus(status:Boolean):void 
     { 
      dispatchEvent(new CheckInternetEvent(CheckInternetEvent.NETWORK_STATUS_CHANGED, status)); 
     } 
    } 
} 

Herkes ben Adobe bir hata olarak bu yayınlanmıştır Adobe Air - Check for internet connection

cevap

0

bu sınıf tanıyabilir ve aşağıdaki not oldu buna eklendi:

Alex Rekish

23:06:11 GMT + 00: 00 12 Nisan 2016

Bu sorunu gördüm ve geçici çözüm bulundu. dinleyicileri, zorla iptal et ve null geçirgen dosya nesnesini browseForOpen yöntemi için kaldırmanız gerekir.

previousBrowseFile.removeEventListener (Event.SELECT, fileSelected); previousBrowseFile.removeEventListener (Event.CANCEL, dosyaKanalı); previousBrowseFile.cancel(); previousBrowseFile = null;

İlgili konular