Forums Développement Multimédia

Aller au contenu

[Résolu] TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.

CODE Actionscript

10 réponses à ce sujet

#1 netti

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 180 messages

Posté 07 mars 2011 - 03:59

Bonjour à tous !

Je vous écris aujourd'hui car je me lance dans l'écriture de classes et je rencontre un problème que je n'arrive pas à résoudre depuis 2 semaines.

je cherche à créer ma propre classe loader mais lors de la compilation j'ai ce message d'erreur :
"TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul."
l'erreur doit être toute bête mais je n'arrive pas à l'identifier... :/

d'avance merci pour votre aide,


Mon fichier main.fla contient ce code :
import classes.compos.*;
var les3LoaderHP:les3Loader = new les3Loader("SUPA_0.1.swf");

et ma classe contient :

package classes.compos
{

        import flash.display.Loader;
        import flash.events.Event;
        import flash.net.URLRequest;
        import flash.events.ProgressEvent;
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
        //import tween max
        import com.greensock.*;
        import com.greensock.easing.*;


        import flash.text.TextField;





        public class les3Loader extends MovieClip
        {

                // CODE DU CHARGEUR
                private var chargeur:Loader = new Loader();
                private var ratio:Number = new Number();
                private var pct:Number = new Number();
               
                public var pctText:TextField = new TextField();
                public var targetUrl:String = new String()  ;



                public function les3Loader(pTargetUrl:String)
                {
                        // constructor code
                        // LOADERS
                        targetUrl = pTargetUrl;
                        chargeur.load(new URLRequest(targetUrl) );
                        // LISTENERS
                        chargeur.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,this.chargementEnProgress);
                        chargeur.contentLoaderInfo.addEventListener(Event.COMPLETE,this.chargementValide);
                        // DISPLAY
                        pctText.text="YOYOYOoyoyo";
                        trace(pctText.text);
                       
//                      this.addChildAt(pctText, 0);
                        pctText.x=200;
                        pctText.y=200;
//                      pctText.width = 1200;
//                      pctText.height = 1200;
//                      pctText.borderColor = 0xFFFFFF;
                        pctText.background = true;
                        pctText.backgroundColor = 0xFFFFFF;


                }





                public function chargementEnProgress(evt:ProgressEvent)
                {
                        trace("poids en cours du les3Loader : "+chargeur.contentLoaderInfo.bytesLoaded);

                }

                public function chargementValide(evt:Event)
                {
                        trace("Fin");

                }

        }

}


#2 eldorkito

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 288 messages

Posté 07 mars 2011 - 08:39

Bonjour,

j'ai testé ta classe et je n'ai pas l'erreur citée.

Mon panneau de sortie affiche bien :


YOYOYOoyoyo
poids en cours du les3Loader : 0
poids en cours du les3Loader : 580
Fin
 

Peux tu nous en dire plus?

A++

#3 Billyben

    KlouChiPonshoñistäs

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2 598 messages

Posté 07 mars 2011 - 10:55

Salut, si tu est sous CS (connais pas les autres IDE...) utilise le débogueur, ça t'indiquera la ligne ou tu as l'erreur, ce qui va grandement t'aider...

#4 netti

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 180 messages

Posté 07 mars 2011 - 12:26

Merci pour vos réponses !

Je pense avoir découvert ou se situait le bug du coups !


Le bug provenait du fait que j'avais ls même lignes de code concernant le stage
- sur mon main.swf
- sur mon SUPA_0.1.swf (celui apellé par le main)

j'ai essayé de désactivé plusieurs lignes, et les lignes qui créaient ce bug étaient les suivantes sur SUPA_0.1.swf :
//stage.align = StageAlign.TOP_LEFT;
//stage.scaleMode = StageScaleMode.NO_SCALE;


> Ca veut dire que je n'ai pas le droit d'utiliser des fonctionnalités liées au stage sur mon swf à charger ?
celui ci hérite forcément des lignes que j'ai déclaré dans main.swf ?

y'a t il une parade ?


Merci :)

Modifié par NeTTi, 07 mars 2011 - 12:27 .


#5 colas.matthieu

    Ceinture Jaune

  • Members
  • PipPip
  • 24 messages

Posté 07 mars 2011 - 19:44

salut !

as tu essayé de faire un
trace( stage )
au tout début de ton SUPA_0.1.swf ? pour être bien certain que l'objet "stage" est bien présent lorsque tu te réfères à ses propriétés "align" et "scaleMode" ? si le trace te retourne "undefined" ou "null", alors ceci expliquerait ton message d'erreur et j'aurais probablement une parade a te proposer.

#6 0900.am

  • Members
  • PipPipPipPipPipPipPipPip
  • 1 505 messages

Posté 07 mars 2011 - 21:18

salut,

en voyant l'erreur je suspectais qu'elle était liée à l'accès au stage. Tant que ton objet n'est pas ajouté à la liste d'affichage, sa référence au stage est nulle.

Le mieux pour parer à ce problème est d'écouter l'événement Event.ADDED_TO_STAGE et y déposer le code où tu manipules le stage parce qu'au moment où cet événement est shooté tu as l'assurance d'avoir un accès au stage.

Tu peux aussi passer une référence au stage dans le constructeur de ta classe mais c'est moins pratique.

A part ça il vaut mieux déclarer dans un premier temps tes variables et les "créer" dans une méthode (le constructeur ou une autre méthode), c'est une meilleure pratique.

#7 netti

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 180 messages

Posté 08 mars 2011 - 05:48

Hello !
Merci beaucoup pour vos réponses !

effectivement un trace(stage); renvoie null quand je lance mon main.swf

j'ai donc placé un
addChild(chargeur);
sur ma méthode de fin de chargement


et un

this.addEventListener(Event.ADDED_TO_STAGE, codeStage);
function codeStage (evt:Event) {
       
        trace("le stage"+stage);
        }
dans le swf qui est apellé.


et la j'ai rien en retour. Apparemment ça ne suffit pas.
Ca veut sans doute dire que j'ai pas bien compris d'ou venait le bug, je pensais vraiment que ca corrigerait le tir ça ?
Vous auriez une suggestion pour me remettre dans les rails de la compréhension ?
Merci pour votre aide oh combien précieuse !

Modifié par NeTTi, 08 mars 2011 - 05:49 .


#8 Tekkila

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 7 357 messages

Posté 08 mars 2011 - 08:27

Salut,

A la place de
addChild(chargeur)
dans la méthode chargementValide, essaie de mettre
addChild(evt.currentTarget.content)

Ainsi, ce n'est pas le chargeur que tu ajouteras à la scène, mais le contenu chargé, c'est à dire ton SWF.

A+

Joni

#9 netti

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 180 messages

Posté 08 mars 2011 - 11:52

Merci beaucoup beaucoup beaucoup j'ai tout compris !
promis plus jamais j'embeterai personne avec ce genre de bug de noob :)

Très bonne journée à tous !

#10 Tekkila

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 7 357 messages

Posté 08 mars 2011 - 11:58

Je peux passer le message en résolu ?

#11 netti

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 180 messages

Posté 12 mars 2011 - 04:06

oui merci :)



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP