Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-02-2012, 21:31   #1 (permalink)
skylla
 
Benutzerbild von szylla
 
Registriert seit: Feb 2011
Beiträge: 166
Question URLLoader Event.COMPLETE will nicht so ganz

hi,

ich hab grad mal eine frage.
und zwar, ich hab eine klasse, die extended EventDispatcher. in dieser klasse hab ich einen URLLoader und auf den loader hab ich mit addEventListener das Event.COMPLETE gesetzt. ich möchte halt eine externe datei laden und warten bis die fertig geladen ist. und genau das funktioniert nicht. aaber, wenn ich die klasse Sprite extenden lasse und nicht EventDispatcher und dann noch meine klasse mit addChild der DisplayList hinzufüge klappts!
wieso ist das so? und das ist natürlich keine lösung. ich hatte das nur per zufall beim testen erfahren. ich würde aber wieder gerne EventDispatcher extenden.

danke für eure hilfe,
szylla
szylla ist offline   Mit Zitat antworten
Alt 02-02-2012, 21:41   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Was willst du laden?
Omega Psi ist offline   Mit Zitat antworten
Alt 02-02-2012, 21:44   #3 (permalink)
skylla
 
Benutzerbild von szylla
 
Registriert seit: Feb 2011
Beiträge: 166
z.B. eine txt datei... ganz simpel

edit: es geht ja wie gesagt auch, aber nur wenn ich die klasse mit dem loader mit addChild der displaylist hinzufüge?!
szylla ist offline   Mit Zitat antworten
Alt 02-02-2012, 21:45   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Code?
Omega Psi ist offline   Mit Zitat antworten
Alt 02-02-2012, 21:50   #5 (permalink)
skylla
 
Benutzerbild von szylla
 
Registriert seit: Feb 2011
Beiträge: 166
PHP-Code:
package {
    
    
import flash.display.Sprite;
    
import flash.events.Event;
    
import flash.events.EventDispatcher;
    
import flash.events.IOErrorEvent;
    
import flash.net.URLLoader;
    
import flash.net.URLLoaderDataFormat;
    
import flash.net.URLRequest;
    
import org.flashdevelop.utils.FlashConnect;

    public final class 
Test extends Sprite {

        public function 
Test():void { }
´
        
public function loadpath:String ):void {

            var 
urlLoader:URLLoader = new URLLoader();
                
urlLoader.dataFormat URLLoaderDataFormat.TEXT;
                
urlLoader.addEventListenerEvent.COMPLETEthis.onLoadCompletefalse0true );
                
urlLoader.addEventListenerIOErrorEvent.IO_ERRORthis.onIOErrorfalse0true );
                
urlLoader.load( new URLRequestpath ) );
        }
        
        private function 
onLoadCompletee:Event ):void {
            
            
FlashConnect.trace"onLoadComplete" );
            
        }
        
        private function 
onIOErrore:IOErrorEvent ):void {
            
            
FlashConnect.trace"onIOError: " );
            
        }

        
    }
    

so gehts wie gesagt... ich adde die klasse zur stage. ist ja auch ein sprite...

aber eigentlich wollte ich die klasse EventDispatcher extenden lassen und nicht adden.. was ja auch gar nicht geht.

so sieht der aufruf aus:
PHP-Code:
var test:Test= new Test();
                
test.load"test.txt" );
                
            
addChildtest ); 
aber das addChild ist ja blödsinn in diesem fall.. das möchte ich nicht haben

Geändert von szylla (02-02-2012 um 21:52 Uhr)
szylla ist offline   Mit Zitat antworten
Alt 02-02-2012, 21:57   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Die Klasse muss in dem Zustand noch gar nichts extenden. Ich denke, der Loader wird schon "garbage collected":
Code:
package {
    
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.IOErrorEvent;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;
    import org.flashdevelop.utils.FlashConnect;

    public final class Test extends EventDispatcher {

        var urlLoader:URLLoader
        public function Test():void { }
´
        public function load( path:String ):void {

            urlLoader = new URLLoader();
                urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
                urlLoader.addEventListener( Event.COMPLETE, this.onLoadComplete, false, 0);
                urlLoader.addEventListener( IOErrorEvent.IO_ERROR, this.onIOError, false, 0);
                urlLoader.load( new URLRequest( path ) );
        }
        
        private function onLoadComplete( e:Event ):void {
            
            FlashConnect.trace( "onLoadComplete" );
            // remove event handlers
        }
        
        private function onIOError( e:IOErrorEvent ):void {
            
            FlashConnect.trace( "onIOError: " + e );
            // remove event handlers
        }

        
    }
    
}
Die "weak references" musst du nicht nutzen, da der URLLoader zusammen mit der Test Instanz gelöscht wird.
Omega Psi ist offline   Mit Zitat antworten
Alt 02-02-2012, 21:58   #7 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Je nachdem, was du machen möchtest, müsste ich den Code noch mal anpassen: "mehrere Connections" vs "lade entweder oder".
Omega Psi ist offline   Mit Zitat antworten
Alt 02-02-2012, 22:02   #8 (permalink)
skylla
 
Benutzerbild von szylla
 
Registriert seit: Feb 2011
Beiträge: 166
hi,
ich weiß, das ist jetzt nur der erste grobe aufbau der klasse! da kommt später noch mehr rein weshalb ich die den eventdispatcher extenden lassen will. ich kann das extenden aber zum jetztigen zeitpunkt auch weglassen, es geht aber trotzdem nicht! ich komm einfach nicht ins onLoadComplete rein?!
szylla ist offline   Mit Zitat antworten
Alt 02-02-2012, 22:03   #9 (permalink)
skylla
 
Benutzerbild von szylla
 
Registriert seit: Feb 2011
Beiträge: 166
oh man, du hattest recht. ich hab die drei letzten 3 params bei addEventListener weggelassen und schon gehts!
szylla ist offline   Mit Zitat antworten
Alt 02-02-2012, 22:10   #10 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Du erzeugst den URLLoader in einer Funktion. Wenn diese Funktion angelaufen ist, und es keine weiteren Referenzen auf die in den Funktion erzeugten Objekten gibt, werden diese von der Garbage Collection gelöscht. Und auch wenn du Event handler registriert hast, die eigentlich dafür sorgen dass die Referenz gehalten wird, so sorgt das letzte Argument dafür, dass die Objekte trotzdem gelöscht werden können.
Omega Psi ist offline   Mit Zitat antworten
Alt 02-02-2012, 22:23   #11 (permalink)
skylla
 
Benutzerbild von szylla
 
Registriert seit: Feb 2011
Beiträge: 166
kapiert, macht sinn! vielen dank
szylla ist offline   Mit Zitat antworten
Alt 02-02-2012, 22:33   #12 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Thumbs up

Sehr gern.
Omega Psi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
UrlLoader ohne Daten nach COMPLETE Event marcodeneu ActionScript 3 1 08-08-2011 12:09
Event.COMPLETE geladene swf aber noch nicht skaddii ActionScript 3 5 13-07-2010 15:27
FileStream Event Complete geht nicht Sebbal Adobe AIR 0 15-03-2010 13:33
Kein COMPLETE Event nach URLLoader Aufruf... HamletBSM ActionScript 3 5 20-10-2009 16:12
Fileupload Event.COMPLETE geht nicht phase Flex programmieren 2 15-01-2009 20:53


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele