2010-12-14 13 views
1

Verwenden von Flash Builder 4 (mit 4.1 flex). Versuchen, eine Statusänderung zu erstellen, nachdem meine Funktion ausgeführt wurde, die den Bildschirm ändern wird, um eine Schaltfläche "fertig" zu haben, die die Anwendung schließt. Wie kann ich der Luft-App sagen, dies zu tun?
Ich habe Folgendes gefunden: protected function setState (newState: String): void für AS3, funktioniert aber nicht auf flex 4. Es sollte den Status in Finished ändern, nachdem das Array von Dateien fertig ist.Status ändern nach Abschluss

 private function initiate_download(event:MouseEvent):void 
     { 
      var filearray:Array = new Array(); 
      filearray[0]="00.jpg"; 
      filearray[1]="01.jpg"; 
      filearray[2]="02.jpg"; 
      for (var i:uint; i < filearray.length; i++) { 
       var remoteURL = "http://domain/" + filearray[i]; 
       var localURL = "C:/dir/" + filearray[i]; 
       downloadFile(remoteURL, localURL); 
      } 


      function downloadFile(url, filename) { 
       // Create the stream for the data request 
       var urlStream = new URLStream(); 

       // Used to initiate request for remote file 
       var request = new URLRequest(url); 

       // Create file stream 
       var fileStream = new FileStream(); 

       // Create a reference to a location on disk 
       var file = File.desktopDirectory.resolvePath(filename); 

       // Called as download progresses 
       var writeFile = function() 
       { 
        // Write to file 
        if (urlStream.bytesAvailable > 51200) 
        { 
         var dataBuffer = new ByteArray(); 
         urlStream.readBytes(dataBuffer, 0, urlStream.bytesAvailable); 
         fileStream.writeBytes(dataBuffer, 0, dataBuffer.length); 
        } 
        return true; 
       } 

       // Called when download completes 
       var finishWriteFile = function() 
       { 
        // Write to file 
        if(urlStream.bytesAvailable > 0) 
        { 
         var dataBuffer = new ByteArray(); 
         urlStream.readBytes(dataBuffer, 0, urlStream.bytesAvailable); 
         fileStream.writeBytes(dataBuffer, 0, dataBuffer.length); 
        } 

        // Close streams 
        fileStream.close(); 
        urlStream.close(); 

        return true; 
       } 

       // Initiate download 
       fileStream.openAsync(file, FileMode.WRITE); 
       urlStream.load(request); 

       // Add event listeners 
       urlStream.addEventListener(Event.COMPLETE, finishWriteFile); 
       urlStream.addEventListener(ProgressEvent.PROGRESS, writeFile); 
      } 
    ]]> 
</fx:Script> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 
<s:states> 
    <s:State name="Start"/> 
    <s:State name="Finished"/> 
</s:states> 
<mx:Image x="0" y="0" source="background.jpg"/> 
<s:Button x="85" y="85" includeIn="Start" label="Update" id="download" click="initiate_download(event)" color="#FFFFFF" fontSize="30"/> 
<s:Button x="131" y="85" includeIn="Finished" label="Finished" id="closer" click="close_window(event)" color="#FFFFFF" fontSize="30"/> 

Antwort

0

, nachdem Sie schließen das Filestream und URLStream können Sie den Zustand ändern

this.currentState = "Finished" 

tun und die Schließen-Schaltfläche sollte nun sichtbar sein.

+0

Danke, das stimmt genau! Wenn Sie es nach dem Strom schließen, nachdem das allererste Array verarbeitet wurde, ändert es sich. Ich musste es mit großen Filmdateien testen. Ich werde daran arbeiten, es zu warten, bis das Ende des Arrays sich ändert. – mubhcaeb