Comunidad de diseño web y desarrollo en internet online

Problema con Singleton

Citar            
MensajeEscrito el 14 Jun 2012 01:39 am
Estoy tratando de entender como se aplica un singleton, pero cuando lo instancio te tira un error en ejecucion.

Clase singleton

Código ActionScript :

package
{
   import p2p.Connection;

   public class Singleton
   {
      private static var _instancia:Singleton=null;
      private var _conn:Connection=null;
      
      public function Singleton(e:SingletonEnforcer)
      {
         
      }
      
      public function getInstace (pconn:Connection=null):Singleton{
         if (_instancia==null){
            _conn=pconn;
            _instancia=new Singleton(new SingletonEnforcer())
         }
         return _instancia;
      }
      

      
      public function nuevoPersonaje (user:String, equipo:int, tipo:int):void{
         var msg:Object = {type:"nuevoPersonaje"};
         msg.user=user;
         msg.equipo=equipo;
         msg.tipo=tipo;
         _conn.postMessage(msg);
      }
      
      public function aparecePersonaje (user:String, dondeAparece:int):void{
         var msg:Object = {type:"aparecePersonaje"};
         msg.user=user;
         msg.dondeAparece=dondeAparece;
         _conn.postMessage(msg);
      }
      
      public function muere (user:String):void{
         var msg:Object = {type:"muere"};
         msg.user=user;
         _conn.postMessage(msg);
      }
      
      public function empiezaMovimiento (user:String, direccion:int):void{
         var msg:Object = {type:"empiezaMovimiento"};
         msg.user=user;
         msg.direccion=direccion;
         _conn.postMessage(msg);
      }
      
      public function terminaMovimiento (user:String, direccion:int):void{
         var msg:Object = {type:"terminaMovimiento"};
         msg.user=user;
         msg.direccion=direccion;
         _conn.postMessage(msg);
      }
      
      public function dondeMira (user:String, direccion:int):void{
         var msg:Object = {type:"dondeMira"};
         msg.user=user;
         msg.direccion=direccion;
         _conn.postMessage(msg);
      }
      
      public function sync (user:String, x:int, y:int):void{
         var msg:Object = {type:"sync"};
         msg.user=user;
         msg.x=x;
         msg.y=y;
         _conn.postMessage(msg);
      }
      
   }
}

class SingletonEnforcer{

}


Codigo del main

Código ActionScript :

s.getInstace(_conn);


Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.

La propiedad que aparece como nula es s.

Por demilp

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Jun 2012 07:26 am
Hola,
la función getInstance (instance con "n") tiene que ser static, y así accedes a ella a través de la clase, no creando una instancia:

Código ActionScript :

var s:Singleton = Singleton.getInstance();

Al hacer eso, tendrás que referirte a _conn de la instancia creada, pero tienes que hacerlo después de crear la instancia:

Código ActionScript :

_instancia = new Singleton(new SingletonEnforcer());
_instancia._conn = pconn;

Y

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 14 Jun 2012 05:31 pm
ampliando lo que dice Isidoro seria asi:

clase singleton:

Código ActionScript :

package
{
   import p2p.Connection;

   public class Singleton
   {
      private static var _instancia:Singleton=null;
      private var _conn:Connection=null;
      
      public function Singleton(e:SingletonEnforcer)
      {
         
      }
      
      public static function getInstance (pconn:Connection=null):Singleton{
         if (_instancia==null){            
            _instancia=new Singleton(new SingletonEnforcer());
       _instancia.conn = pconn;
         }
         return _instancia;
      }
     public function set conn(pconn:Connection=null):void
     {
        _conn = pconn;
     }
     public function get conn():Connection
     {
        return _conn;
     }
   }
}
class SingletonEnforcer{

}


clase creadora

Código ActionScript :

var mivar:Singleton = Singleton.getInstance(pconn);

trace(mivar.conn);



Saludos



eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.