Я получаю сообщение об ошибке при импорте FXG в проект Flex 4.6 - PullRequest
2 голосов
/ 14 марта 2012

Я создал файл fxg, используя Inkscape и плагин fxg. Он называется BugattiVeyron.fxg

Я также создал проект AS3, используя flex sdk 4.6 и FlashDevelop 4, и импортирую этот файл, используя оператор импорта, подобный этому

import BugattiVeyron;

и создать его вот так

private var bugatti:BugattiVeyron = new BugattiVeyron ();

Использование кнопки сборки в FD4 не дает никаких ошибок, но когда я запускаю ее, я получаю эту ошибку, хотя, когда я отклоняю все ошибки, файл хорошо импортируется, и я могу добавить к нему события.

ошибка:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::updateCallbacks()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:7345]
at mx.core::UIComponent/set nestLevel()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:4189]
at spark.core::SpriteVisualElement/http://www.adobe.com/2006/flex/mx/internal::addingChild()[E:\dev\4.y\frameworks\projects\spark\src\spark\core\SpriteVisualElement.as:2247]
at spark.core::SpriteVisualElement/addChild()[E:\dev\4.y\frameworks\projects\spark\src\spark\core\SpriteVisualElement.as:2211]
at resources::BugattiVeyron_Text_2126220941/createText()
at resources::BugattiVeyron_Text_2126220941()
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at mx.core::FlexSprite()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\FlexSprite.as:61]
at spark.core::SpriteVisualElement()[E:\dev\4.y\frameworks\projects\spark\src\spark\core\SpriteVisualElement.as:88]
at resources::BugattiVeyron()[resources\BugattiVeyron-generated.as:10]

, поэтому я получаю эту ошибку, но файл импортируется после того, как я отклонил ошибки.

в чем может быть проблема, есть идеи?

Ответы [ 2 ]

3 голосов
/ 24 октября 2012

Я сам боролся с этой проблемой и наконец понял, как заставить ее работать. Есть два пути.

Ваш файл FXG должен находиться в том же каталоге, что и ваш Main.as, чтобы называть его следующим образом:

import BugattiVeyron;

Но, разумеется, если ваши изображения хранятся в другой папке, вам нужно будет указать путь к классам в вашем проекте, чтобы ссылаться на файл FXG. Очевидно, что мы не можем получить доступ к файлу FXG в другом каталоге, например:

import ../lib/BugattiVeyron

Если вы щелкнете правой кнопкой мыши по своему проекту в FlashDevelop и выберите «Свойства» в контекстном меню, вы сможете добавить выбранный каталог в качестве пути к классам, чтобы получить доступ к файлу FXG. В моем случае я добавил lib как путь к классам для проекта. Это позволило мне импортировать мой актив, как вы ранее пытались это сделать.

import BugattiVeyron;
public class Main extends Sprite {
  var bugatti:BugattiVeyron = new BugattiVeyron();
..some code here...
}

Надеюсь, это поможет, я боролась неделю, пытаясь понять это.

0 голосов
/ 25 мая 2015

Я столкнулся с той же проблемой, особенно при попытке создать экземпляр FXG, содержащий текст (элемент <RichText>) из проекта только для AS3 (без MXML) во FlashDevelop.Я смог импортировать и использовать другие файлы FXG, которые не содержали RichText без каких-либо проблем.

Я немного запутался в точных деталях, но похоже, что ошибка возникает вследствие вызована createText() (resources::BugattiVeyron_Text_2126220941/createText() в вашем случае), потому что библиотека Flex не инициализирована для чистого приложения AS3.Самое простое решение - определить приложение в MXML, а не в AS3, то есть

<?xml version="1.0" encoding="utf-8"?>
<s:Application 
  xmlns:fx="http://ns.adobe.com/mxml/2009" 
  xmlns:s="library://ns.adobe.com/flex/spark" 
  xmlns:bv="*"
>
<bv:BugattiVeyron/>
</s:Application>

вместо

import BugattiVeyron;
public class Main extends Sprite {
  var bugatti:BugattiVeyron = new BugattiVeyron();
}

(подробнее об этом в связанном вопросе: [использовать Flex Framework / Components без использования MXML? . Найдите раздел «необходимые обновления для Flex 4».)

В качестве альтернативы, если вы не хотите накладных расходов времени выполнения библиотек Flex, вы можетеотредактируйте свой FXG, чтобы преобразовать текст в пути.Это должно работать с проектами только для AS3, но я не был бы слишком удивлен, если бы были другие функции FXG, которые столкнулись с подобными проблемами.

...