Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибка 1009 (http://www.flasher.ru/forum/showthread.php?t=200975)

mAK08 10.06.2013 00:39

Ошибка 1009
 
Код:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
        at MC_M()
        at flash.display::Sprite/constructChildren()
        at flash.display::Sprite()
        at flash.display::MovieClip()

Как ее можно обойти? Вроде все исправил но это осталось...

-De- 10.06.2013 00:47

Не дёргать методы и поля обьекта, который null. Научиться отлаживать, в дебаггере скорее всего конкретную строку бы увидели и вопрос бы не встал. Без кода короче ничего больше не скажешь, но тут эта ошибка обычно от того, что stage у DisplayObject null, пока этот обьект на сцену не добавили.

mAK08 10.06.2013 01:13

Код AS3:

package 
{
 
        import flash.events.MouseEvent;
        import com.greensock.*;
        import com.greensock.easing.*;
        import flash.events.Event;
        import flash.display.MovieClip;
        import flash.geom.Rectangle;
        import flash.media.Sound;
        import flash.display.Sprite;
        import flash.media.SoundTransform;
 
 
        public class MC_M extends MovieClip
        {
                private var vol:Number;
                private var drag_start:Boolean = false;
                private var percent:Number = seek1.seekk.width;
                private var currentPosition:Number = 0;
                private var playingStatus:Boolean = true;
                private var rev:Boolean = false;
                private var forw:Boolean = false;
                private var astep:Number = 3;
                private var player_volume:Number = 100;
 
 
                public function MC_M()
                {
                        vol = 10;
                        slider_mc.mc.x = 100;
                        reviewB.addEventListener(MouseEvent.MOUSE_DOWN,reviewDOWN);
                        reviewB.addEventListener(MouseEvent.MOUSE_UP,reviewUP);
                        forward.addEventListener(MouseEvent.MOUSE_DOWN,forwardDOWN);
                        forward.addEventListener(MouseEvent.MOUSE_UP,forwardUP);
                        stopB.addEventListener(MouseEvent.CLICK,stopBB);
                        pauseB.addEventListener(MouseEvent.CLICK, pauseBB);
                        playB.addEventListener(MouseEvent.CLICK,playBB);
                        seek1.scrub.addEventListener(MouseEvent.MOUSE_DOWN,onPressS);
                        seek1.scrub.addEventListener(MouseEvent.MOUSE_UP,onReleaseS);
                        seek1.scrub.addEventListener(MouseEvent.RELEASE_OUTSIDE,onReleaseS);
                        slider_mc.mc.addEventListener(MouseEvent.MOUSE_DOWN, dragSlider);
                        slider_mc.mc.stage.addEventListener(MouseEvent.MOUSE_UP, stopSlider);
 
                        ifdrag();
                        this.soundTransform = new SoundTransform(3.3);
                        stop();
 
 
                }
 
                private function reviewDOWN(e:MouseEvent):void
                {
                        rev = true;
                        reviewB.addEventListener(Event.ENTER_FRAME,reviewEnterFrame);
                }
                private function reviewEnterFrame(e:MouseEvent):void
                {
                        if (rev)
                        {
                                currentPosition = this.currentFrame;
                                if (playingStatus)
                                {
                                        this.gotoAndPlay(currentPosition - astep);
                                }
                                else
                                {
                                        this.gotoAndStop(currentPosition - astep);
                                }
                        }
                }
 
 
                private function reviewUP(e:MouseEvent):void
                {
                        rev = false;
                }
 
 
                private function forwardDOWN(e:MouseEvent):void
                {
                        forw = true;
                        forward.addEventListener(Event.ENTER_FRAME,forwardEnterFrame);
                }
 
                private function forwardEnterFrame(e:MouseEvent):void
                {
                        if (forw)
                        {
                                currentPosition = this.currentFrame;
                                if (playingStatus)
                                {
                                        this.gotoAndPlay(currentPosition + astep);
                                }
                                else
                                {
                                        this.gotoAndStop(currentPosition + astep);
                                }
                        }
                }
 
 
                private function forwardUP(e:MouseEvent):void
                {
                        forw = false;
                }
 
 
 
 
                private function stopBB(e:MouseEvent):void
                {
                        playingStatus = false;
                        this.stop();
                        currentPosition = 1;
                        this.gotoAndStop(currentPosition);
 
                }
 
 
 
                private function pauseBB(e:MouseEvent):void
                {
                        playingStatus = false;
                        currentPosition = this.currentFrame;
                        this.stop();
 
                }
 
 
 
                private function playBB(e:MouseEvent):void
                {
                        playingStatus = true;
                        this.gotoAndPlay(currentPosition);
 
                }
 
                private function ifdrag():void
                {
                        if (! drag_start)
                        {
                                seek1.scrub.addEventListener(Event.ENTER_FRAME,SC);
 
 
                                function SC(e:Event):void
                                {
                                        seek1.scrub.x = seek1.seekk.x + (this.currentFrame/this.totalFrames)*percent;
                                }
 
                        }
                }
 
 
 
 
                private function onPressS(e:MouseEvent):void
                {
                        this.stop();
                        drag_start = true;
                        seek1.scrub.startDrag(false,new Rectangle(0,0,500,0));
                        seek1.scrub.removeEventListener(Event.ENTER_FRAME,SC);
 
 
                }
                function SC(e:Event):void
                                {
                                        seek1.scrub.x = seek1.seekk.x + (this.currentFrame/this.totalFrames)*percent;
                                }
 
 
 
                private function onReleaseS(e:MouseEvent):void
                {
                        drag_start = true;
                        this.stop();
                        currentPosition = Math.floor((seek1.scrub.x/percent)*this.totalFrames);
                        if (playingStatus)
                        {
                                this.gotoAndPlay(currentPosition);
                                playingStatus = true;
                        }
                        else
                        {
                                this.gotoAndStop(currentPosition);
                                playingStatus = false;
                        }
                        seek1.scrub.stopDrag();
 
 
                        seek1.scrub.addEventListener(Event.ENTER_FRAME,SC);
 
                }
 
 
 
                private function dragSlider(event:MouseEvent):void
                {
                        slider_mc.mc.startDrag(false,new Rectangle(0,0,100,0));
                        slider_mc.mc.removeEventListener(MouseEvent.CLICK, dragSlider);
                        slider_mc.mc.addEventListener(Event.ENTER_FRAME, changeVolume);
                }
 
                private function stopSlider(event:MouseEvent):void
                {
                        slider_mc.mc.stopDrag();
                        slider_mc.mc.removeEventListener(MouseEvent.MOUSE_UP, stopSlider);
                }
 
                private function changeVolume(event:Event):void
                {
                        vol = Math.round(slider_mc.mc.x) / 30;
                        this.soundTransform = new SoundTransform(vol);
                }
 
        }
 
}

искал, не нашел... А строку не показывает, только ошибку в выводе... Все добавлено у всех имена проставлены... Не знаю даже

Добавлено через 2 минуты
Как можно найти какой именно обьект null?

-De- 10.06.2013 01:40

В дебаге запустить. И пошагово пройти этот конструктор (если упадёт не заходя, то seek1.seekk.width узнать не смогло, т.е. seek1 null или seek1.seekk). Если MC_M - не Document class, то явно slider_mc.mc.stage - это null, про что написал.

mAK08 10.06.2013 02:01

Да правильно вы сказали это из за seekk который лежит в seek1. А как можно обратиться из класса к нему ?? я только начал в классах просто в кадре писал все получалось...

Ёлочка 10.06.2013 02:08

У вас ошибка в строке private var percent:Number = seek1.seekk.width; Обращаться к seek1.seekk нужно в конструкторе. seek1.seekk не существует до того момента, пока не создан главный класс.

iNils 10.06.2013 02:12

mAK08, в AS не принято использовать символ _ в качестве разделителя в названии переменных и функциях, нужно использовать camelCase. Используют только в наименовании констант, так как они пишутся в верхнем регистре.

Также, _ используется перед определением приватных переменных.
Таким образом, запись
Код AS3:

private var player_volume:Number = 100;

Должна выглядеть так
Код AS3:

private var _playerVolume:Number = 100;


AlexCooper 10.06.2013 10:18

Ёлочка хочет сказать что запись
Код AS3:

private var percent:Number = seek1.seekk.width;

нужно переписать на
Код AS3:

private var percent:Number = 0;

+ а здесь что является конструктором (возможно нужно дождаться ADDED_TO_STAGE )
Код AS3:

public function MC_M()
{  percent = seek1.seekk.width;

, а так в целом намного лучше чем раньше в кадрах))

Добавлено через 4 минуты
и еще одно
Код AS3:

                private function ifdrag():void
                {
                        if (! drag_start)
                        {
                                seek1.scrub.addEventListener(Event.ENTER_FRAME,SC);
 
 
                                function SC(e:Event):void
                                {
                                        seek1.scrub.x = seek1.seekk.x + (this.currentFrame/this.totalFrames)*percent;
                                }
 
                        }
                }

не делайте так. Проблема в том что анонимная функция может быть удаленна сборщиком мусора, так как на неё не остается ссылки. Из-за этого Ваша программа может работать некорректно, а Вы тратить часы на её отладку. Всегда выносите функции в
Код AS3:

internal function SC(e:Event):void
{
        seek1.scrub.x = seek1.seekk.x + (this.currentFrame/this.totalFrames)*percent;
}


caseyryan 10.06.2013 10:22

Цитата:

Сообщение от Ёлочка (Сообщение 1137322)
У вас ошибка в строке private var percent:Number = seek1.seekk.width; Обращаться к seek1.seekk нужно в конструкторе. seek1.seekk не существует до того момента, пока не создан главный класс.

Компилятор все равно перенесет этот код в конструктор. Так что проблема тут не в этом.

Ёлочка 10.06.2013 14:01

Вложений: 1
Цитата:

Сообщение от caseyryan (Сообщение 1137351)
Компилятор все равно перенесет этот код в конструктор. Так что проблема тут не в этом.

А это тогда что?
Цитата:

Сообщение от AlexCooper (Сообщение 1137349)
Ёлочка хочет сказать что запись нужно переписать на

Именно так. :)


Часовой пояс GMT +4, время: 21:53.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.