IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Simulation de thread pour Event.COMPLETE


Sujet :

ActionScript 3

  1. #1
    Membre éprouvé Avatar de +Guilhem
    Profil pro
    Ingénieur d'études Java/JEE
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études Java/JEE

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut Simulation de thread pour Event.COMPLETE
    Bonjour à tous,

    Avant d'aborder le sujet, sachez que je débute en AS3.

    Voici le contexte :
    J'ai une classe (AS3) qui, entre autres, effectue le chargement d'un fichier XML. J'ai un attribut contenu dans ma classe qui me permet, à la fin du chargement du fichier XML, de récupérer le contenu du fichier XML afin d'y effectuer des traitements.
    Le code est donc le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function charger(file:String) {
    	...
    	chargeur = new URLLoader ();
    	adresse = new URLRequest (file);
    	chargeur.dataFormat = URLLoaderDataFormat.TEXT;
    	chargeur.addEventListener(Event.COMPLETE, finChargementXML);
    	chargeur.load(adresse);
    	...
    }
     
     
    function finChargementXML(event:Event) {
    	contenu = event.target.data;
    }
    En plus de cela, j'ai une fonction getXML() qui me permet de récupérer le contenu du fichier XML (donc retourne l'attribut contenu). Dans l'idéal je voudrais l'utiliser comme ça (cat de type de ma classe en question) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    cat.charger("config.xml")
    var xml = cat.getXML()
    ...
    Le problème, c'est que cat.getXML() me renvoie null. J'ai donc essayé de mettre un timer avant cette instruction qui fait attendre 5 secondes pour que le fichier XML ait le temps de charger. Rien n'y fait, ça me retourne toujours null.

    Après quelques recherches je me suis aperçu qu'il n'existait pas de threads en AS3 (il doit bien y avoir une raison mais franchement je trouve ça absurde... ou alors me trompe-je ?). Mon problème est donc tout à fait logique, il doit attendre de terminer l'exécution du code pour passer à celle de finChargementXML.

    Ma question est donc : comment palier à ce problème ?
    J'ai donc penser à deux solutions : simuler un thread ou accéder à la pile d'exécution pour lister tous les appels et détecter un appel à finChargementXML (auquel cas l'exécuter, mais est-ce possible ?).

    Merci d'avance pour vos réponses.

  2. #2
    Membre chevronné Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Par défaut
    Salut !

    Ta class dois extends eventDispatcher ou un de ces héritier (sprite , loader , etc ... ) pour pouvoir répandre un evenement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function finChargementXML(event:Event) {
    	contenu = event.target.data;
            //On lache un event complete
            dispatchEvent( new Event(Event.COMPLETE));
    }
    Le code d'utilisation de ta class :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var load:MyLoad = new MyLoad();
    //On ajoute un ecouteur
    load.addEventListener(Event.COMPLETE,onLoadComplete);
    load.charger("config.xml");
    la fonction onLoadComplete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private function onLoadComplete(e:Event):void{
                var load:MyLoad = e.target as MyLoad;
                //on supprime l'ecouteur
                load.removeEventListener(Event.COMPLETE,onLoadComplete);
                var xml:XML = (e.target.getXML());
    }
    Code & Enjoy

  3. #3
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 21
    Par défaut
    Slt.

    J'essaie d'appliquer cette methode mais j'ai 2 soucis.

    1 ) malgre mon addlistener, je ne recois aucun message lors de la fin de la methode de ma classe.

    2 ) Comment est il possible d'utiliser le dispatchEvent dans une methode declaree en statique ?

  4. #4
    Membre très actif

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 612
    Par défaut
    bonjour tenter de rajouter
    ....
    chargeur.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
    ....
    private function errorHandler(e:IOErrorEvent):void {
    trace("Had problem loading the XML File.");
    }
    Pour voir si il trouve bien le fichier

Discussions similaires

  1. Utilisation d'un thread pour faire une pause.
    Par ropabo dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 11/06/2006, 14h28
  2. [VB.NET][VS2005] Thread pour form MDI
    Par daner06 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 18/04/2006, 14h26
  3. [MFC] Creation d'un thread pour un popup d'attente
    Par firejocker dans le forum MFC
    Réponses: 8
    Dernier message: 07/02/2006, 09h15
  4. Réponses: 3
    Dernier message: 11/02/2004, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo