Comunidad de diseño web y desarrollo en internet online

Error #1009: Cannot access a property or method of a null object refer

Citar            
MensajeEscrito el 25 Ago 2011 02:20 pm
Muy buenas,
estoy montando un player con play/pause en as3 y funciona bien, pero al clickar sobre el pause me da el siguiente error:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Player_as3_prueba4_fla::MainTimeline/onEnterFrame()

El caso es que aun y así la accion de pause se genera bien y funciona. El problema viene porque a este player se le debe llamar mediante un externalInterface desde java...y allí es cuando este problema cobra presencia, ya que es entonces cuando no hace el pause y aparece en el navegador el siguiente error:

Error calling method on NPObject.


Pongo todo el codigo (el del external interface también) a ver si alguien me puede echar un cable.

Graciaaaas! *-*


import flash.events.Event;
import flash.media.Sound;
import flash.net.URLRequest;
import flash.external.ExternalInterface;

var keyStr:String;var valueStr:String;
var texto3:String;

var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;


for (keyStr in paramObj) {
valueStr = String(paramObj[keyStr]);

if(keyStr == "parametro1"){
trace(valueStr);

texto3=valueStr;
//valueStr="http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3";
}
if(keyStr == "parametro2"){
trace(valueStr);
}

}



var snd:Sound = new Sound(new URLRequest("sound.mp3"));
/*var req:URLRequest = new
URLRequest(texto3);
snd.load(req); */

var channel:SoundChannel = snd.play();

var pausePosition:int;
channel.stop();
channel = null;
var musicOn:Boolean = false



function pauseSound(event:MouseEvent):void{
pausePosition = channel.position;
channel.stop();
channel = null;
trace("pauseee!!!");
}
pause_btn.addEventListener(MouseEvent.CLICK, pauseSound);

function playSound(e:Event):void {
if (channel == null){
channel = snd.play(pausePosition);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
}

}

play_btn.addEventListener(MouseEvent.CLICK, playSound);


function onEnterFrame(event:Event):void
{
var estimatedLength:int =
Math.ceil(snd.length / (snd.bytesLoaded / snd.bytesTotal));
var playbackPercent:uint =
Math.round(100 * (channel.position / estimatedLength));
trace("Sound playback is " + playbackPercent + "% complete.");
}

function onPlaybackComplete(event:Event)
{
trace("The sound has finished playing.");
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
musicOn=false;
}

//EXTERNAL INTERFACE
function sonidoPlay() {
if (channel == null){
channel = snd.play(pausePosition);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
}
}

ExternalInterface.addCallback( "playSWF", sonidoPlay );

function sonidoPause(event:MouseEvent):void{
pausePosition = channel.position;
channel.stop();
channel = null;
}
ExternalInterface.addCallback( "pauseSWF", sonidoPause );

Por monikstuff

4 de clabLevel



 

chrome
Citar            
MensajeEscrito el 25 Ago 2011 02:30 pm
En principio, dado que lo llamas desde ExternalInterface, tiene que da error de argumento:

function sonidoPause(event:MouseEvent):void{

Ya que no hay MouseEvent, debes ponerlo opcional

function sonidoPause(event:MouseEvent = null):void{

Luego dado que en la llamada del Pause pones channel a null, pero este se está usando en el onEnterFrame (que no quitas al pausar), channel.position no existe

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 Ago 2011 01:58 pm
Hola Jorge,
muchas gracias por responder!
He cambiado la linea que me di ces:
function sonidoPause(event:MouseEvent = null):void{
pero sigue dando el mismo error :(

Lo de la llamada de pause...creo que entiendo lo que me dices pero es que si que me lee la posición a la que se ha quedado y vuelve al play desde allí... (es eso a lo que te refieres?). Mi problema en principio es lo del error este que me da al comunicar, el resto me funciona bien.

Gracias!
Mónica.

Por monikstuff

4 de clabLevel



 

chrome
Citar            
MensajeEscrito el 26 Ago 2011 02:05 pm
Tienes esta línea en pause

channel = null;

Y tienes esta línea en el onEnterFrame

var playbackPercent:uint = Math.round(100 * (channel.position / estimatedLength));

Es decir al hacer la pausa el onEnterFrame de pronto se encuentra con un null al tratar de calcular el playbackPercent, y tira ese error. La pausa además de lo que hace, debería detener el onEnterFrame antes de pasar el channel a null

Código ActionScript :

removeEventListener(Event.ENTER_FRAME, onEnterFrame);
channel = null;


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 29 Ago 2011 12:26 pm
Ey! Que bien Jorge, está solucionado *-*
Muchas graciaaas!

Mónica.

Por monikstuff

4 de clabLevel



 

chrome

 

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