Frage

Ich erhalte Fehler Compiler, wenn ich versuche flashVars in einer AS3 Klasse zuzugreifen.

Hier ist eine gestrippt Version des Codes:

package myPackage {
 import flash.display.Loader;
 import flash.display.LoaderInfo;
 import flash.display.Sprite;
  public class myClass {
    public function CTrafficHandler() {
        var myVar:String = LoaderInfo(this.root.loaderInfo).parameters.myFvar;}}}

Und ich bekomme einen Übersetzungsfehler:

1119: Der Zugang von möglicherweise nicht definierte Eigenschaft root über einen Verweis mit statischer Typ. Quelle: myClass

Wenn ich die Klasse Zeile ändern

public class myClass extends Sprite {

Ich habe keinen Compiler-Fehler, aber ich dies tun, erhalten im Ausgabefenster:

Typeerror: Error # 1009:. Kann nicht auf eine Eigenschaft oder Methode einer null-Objektreferenz zugreifen

Über den Debugger (wie vorgeschlagen) Ich kann sehen, dass this.root ist null.

Wie kann ich dieses Problem lösen?

War es hilfreich?

Lösung 2

Ich fand, was das Problem war. Die Klasse in Frage war nicht die Hauptklasse im Projekt verwendet, sondern eine sekundäre Klasse.

Ich habe den Code in die Hauptklasse bewegt, um die Parameter zu erhalten, und nachdem ich sie bekam, schickte ich sie an den Konstruktor der Klasse Funktion.

Andere Tipps

Ihr Problem ist, dass Ihr Display an dem Punkt nicht, an dem an die Displaylist, hinzugefügt Sie versuchen, Flash zugreifen Vars. Das Stamm-Anzeigeobjekt ist daher null, entsprechend Ihr Objekt.

Sie können sicherstellen, dass Ihre Display auf der Bühne sind nachfolgend mit:

package
{
    import flash.display.Sprite;
    import flash.events.Event;

    public class MySprite extends Sprite
    {
        // constructor
        public function MySprite()
        {
            super();
            addEventListener( Event.ADDED_TO_STAGE, onAddedToStage, false, 0, true );
        }

        private function onAddedToStage( event:Event ):void
        {
            removeEventListener( Event.ADDED_TO_STAGE, onAddedToStage );

            var paramList:Object = LoaderInfo( this.root.loaderInfo ).parameters;
            var myParam:String = paramList["myParam"];
        }
    }
}

`

Das Problem war in der Tat, dass Sie diese Informationen aus einem Nicht-Anzeige-Objekt zuzugreifen versucht hat, oder von außerhalb der Dokumentenklasse. Wenn Sie möchten, Wurzel oder Bühne zugreifen zu können, das Objekt, das solche zugreifen möchte muss zuerst auf der Anzeigeliste hinzugefügt werden.

Ich verwende oft flashvars für Variablen, die oft während des gesamten Projekts verwendet werden. Variablen wie Land und Sprache. Ich finde, dass in diesem Fall ist es am besten, diese Parameter in der Dokumentenklasse zu fangen und öffentliche Variablen mit den Parametern als Werte erstellen. Dies wird _global Stil Zugang zu diesen Variablen geben. Das ist alles gesagt ist, sollten Sie wirklich sparsam globale Variablen verwenden, vor allem, wenn an gemeinsamen Projekten arbeiten.

Als Alternative könnten Sie die mx.core.Application.application.parameters versuchen mit Objekt.

Von der LiveDocs Seite für mx.core. Anwendung :

  

Anwendung : Object   
[statisch] [schreibgeschützt] Ein Verweis auf die Top-Level-Anwendung.   
  
Parameter : Object   
[schreibgeschützt] Die Parameter Eigenschaft gibt ein Objekt, das Name-Wert-Paare, die die zu dieser Anwendung bereitgestellt Parameter.   
  
Es gibt zwei Quellen von Parametern: die Abfrage-Zeichenfolge der URL der Anwendung, und der Wert der FlashVars HTML-Parameter (dies betrifft nur die Hauptanwendung)

.

Ich glaube, Sie von Sprite erweitern sollte, aber sicher sein, es zuerst und vielleicht auf die Bühne gebracht zu initialisieren. Versuchen Sie, das Debuggen zu ermöglichen und sehen, was genau null ist als Ausnahme Bericht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top