Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.04.2011, 23:01
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 1  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
По умолчанию Ошибка 1009, но объект существует...

Я в расстеряности... строчкой выше объект существует, а строчкой ниже - NPE. Я уже все возможные варианты перебрал, какие мог придумать. Дисассемблил, не видно там ничего такого... вобщем мистика какая-то, может у кого-нибудь будут идеи?

Функция в которой случается ошибка:
Код AS3:
public function read(from:AS3Sinks, flags:Vector.<Function>):Boolean
{
	var word:String;
	var subseq:String = from.source.substr(from.column);
	word = subseq.match(from.settings.alphaNumRegExp)[0];
	trace(flags[2], flags[2].apply, flags[2].length, flags[2](false));
	var foo:Function = flags[2];
	trace(foo); // function Function() {}
//	flags[0](false);
//	flags[1](false);
//	flags[2](false);
	foo(false); // NPE
 
	for (var i:int; i < word.length; i++)
	{
		from.advanceColumn(word.charAt(i));
	}
	if (from.onDefault)
		from.appendCollectedText(from.onDefault(word));
	return from.column < from.source.length;
}
// Функция, которую она вызывает: flags[2]
private function collectWords(value:Boolean):void
{
	this._collectWords = value;
}
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 18.04.2011 в 23:06.
Старый 18.04.2011, 23:18
ZZZubec вне форума Посмотреть профиль Отправить личное сообщение для ZZZubec Найти все сообщения от ZZZubec
  № 2  
Ответить с цитированием
ZZZubec

Регистрация: Apr 2011
Сообщений: 20
а чему равен flags[2]? ясно
Я попробывал со статикой, всё гут. думаю...
и с динамиком тоже...
Код AS1/AS2:
var flags:Vector.<Function> = new Vector.<Function>();
flags.push( test );
flags.push( test );
flags.push( test );
var foo:Function = flags[2];
trace( flags[2] );
trace( foo );
foo( true );
вывод:
function Function() {}
function Function() {}
activate test: true


Последний раз редактировалось ZZZubec; 18.04.2011 в 23:24.
Старый 18.04.2011, 23:36
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Фишка в том, что функция вызывается несколько раз, и отрабатывает пару раз как нужно, а потом вдруг "забывает". Функция вызывается таким образом:

Код AS3:
while (nextSink = this._stack.next())
{
	//----------------------------------------\/  Вот это она.
	if (nextSink.isSinkStart(this) && nextSink.read(this, flags))
		this._stack.reset();
}
Код:
        debugline     	17
        findpropstrict	:trace
        getlocal      	5
        callproperty  	:trace (1)
        pop           	
        debugline     	21
        getlocal      	5
        getglobalscope	
        pushfalse     	
        call          	(1)
        pop
Это непосредственно проблемное место. Если чесно, я не знаю, что делает getglobalscope почему именно им воспользовались в данном случае...
__________________
Hell is the possibility of sanity

Старый 18.04.2011, 23:43
ZZZubec вне форума Посмотреть профиль Отправить личное сообщение для ZZZubec Найти все сообщения от ZZZubec
  № 4  
Ответить с цитированием
ZZZubec

Регистрация: Apr 2011
Сообщений: 20
а что если нет доступа не к функции, а к переменной this._collectWords

Старый 19.04.2011, 00:18
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
как это нет, а как же он тогда скомпилировался? И не доходит он туда вообще, он умирает именно на строчке с вызовом функции, но не понятно, что он ищет (или где).

EDIT:
Дальше больше... получил NPE в вот такой вот строчке:
Код AS3:
super._collected.splice(0, super._collected.length);
super._collected объявлен так:
Код AS3:
protected const _collected:Vector.<String> = new <String>[];
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 19.04.2011 в 02:03.
Старый 19.04.2011, 02:30
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 6  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Ничего тут к сожалению не понял, но вспомнил баг, который недавно сам словил.
В одном месте (уже переписанном раза три) на простой строчке, где делался splice из вектора (по вполне существующему индексу) вываливался OutOfMemoryError. Причем, кажется, даже не на всех браузерах + в дебаге.
Может дело в версии плеера?


P.S. Последнего сообщения не видел. Вот примерно так же.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.


Последний раз редактировалось ChuwY; 19.04.2011 в 02:33.
Старый 19.04.2011, 13:02
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 7  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
Дальше больше... получил NPE в вот такой вот строчке:
интереса ради собрал конструкцию, никакой ошибки нет

Код AS3:
package  
{
 
	public class MainClass
	{
		protected const _collected:Vector.<String> = new <String>[];
 
		public function MainClass() 
		{
			_collected.push("test");
		}
 
	}
 
}
Код AS3:
package  
{
 
	public class NewClass extends MainClass 
	{
 
		public function NewClass() 
		{
			trace("NewClass::NewClass super._collected.length",super._collected.length); 
			super._collected.splice(0, super._collected.length);
 
			trace("NewClass::NewClass super._collected.length after splice",super._collected.length); 
		}
 
	}
 
}
Вывод:

Код:
NewClass::NewClass super._collected.length 1
NewClass::NewClass super._collected.length after splice 0

Старый 19.04.2011, 14:41
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Так фишка-то в чем - и не должно быть ошибки. Ошибка только проявляется в конкретном проекте при определенном стечении обстоятельств, а вот какие именно обстоятельства важны для ее проявления - не понятно.
__________________
Hell is the possibility of sanity

Старый 19.04.2011, 15:07
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 9  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
как я понимаю, тут вариантов-то не много
либо сам вектор стал нуллом, либо параметры splice ссылаются на несуществующий индекс, т.е., нуллом является элемент вектора

ну, если конечно исключить баг плеера при использовании splice

я бы выставил отладочную печать в этом месте и банально ждал сбоя

Старый 19.04.2011, 16:24
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Так посмотрите внимательно на скриншот (кстати, вот еще один). Отладчик видит вектор, и ошибка возникает не при попытке вызвать splice - еще до того, когда обращаемся к length. Т.е. это бага либо плеера либо компилятора, а вот кого именно и что именно происходит - не понятно.
Миниатюры
Нажмите на изображение для увеличения
Название: 1009-but-object-exists-2.jpg
Просмотров: 133
Размер:	85.1 Кб
ID:	26465  
__________________
Hell is the possibility of sanity

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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