2012-03-14 22 views
2

Inkscapeとfxgプラグインを使用してfxgファイルを作成しました。それは私ものFlex SDK 4.6とFlashDevelopの4を使用してAS3プロジェクトを作成し、このfxgをflex 4.6プロジェクトにインポートするときにエラーが発生する

import BugattiVeyron; 

のようなimport文を使用してこのファイルをインポートBugattiVeyron.fxg

と呼ばれ、この

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] 

はので、私はこのエラーを取得しますが、私は、エラーを却下した後、ファイルがインポートされます。

何が問題なのでしょうか?

+0

1)コードを投稿してください2)createText()メソッドを呼び出すときにBugattiVeyron_Textインスタンスがnullでないかどうかをチェックしてください! –

+0

ベクトルパスにsvgのすべてのテキストを作成しましたが、なぜテキストについてのエラーはまだ出ますか? – Vlad

+0

はおそらくfxg自体がcorrupptedですか?たぶん、Inkscapeプラグインはうまくエクスポートできません。どう思いますか? – Vlad

答えて

3

私はこの問題に自分自身で苦労し、最終的にどのように動作させるかを考え出しました。 2つの方法があります。

あなたのFXGファイルはこのようにそれを呼び出すためにあなたのMain.asと同じディレクトリにする必要があります:あなたは別のフォルダに画像資産を持っている場合、あなたがする必要があります

import BugattiVeyron; 

しかしまたはコースFXGファイルを参照するためにプロジェクト内にクラスパスを設定します。あなたは右のFlashDevelopのでプロジェクトを右クリックし、コンテキストメニューから[プロパティをクリックすると、あなたのように任意のディレクトリを追加することができます

import ../lib/BugattiVeyron 

:もちろん我々はこのような別のディレクトリにFXGファイルにアクセスできません。あなたのFXGファイルにアクセスするためのクラスパス。私の場合は、プロジェクトのクラスパスとしてlibを追加しました。これにより、以前にやったように私の資産をインポートすることができました。

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

希望があれば、私はこれを理解しようと1週間苦労しました。

0

特に、FlashDevelopのAS3専用プロジェクト(MXMLなし)のテキスト(<RichText>要素)を含むFXGをインスタンス化しようとすると、同じ問題が発生しました。 RichTextを含まない他のFXGファイルを何の問題もなくインポートして使用することができました。

実際のところ、ちょっと曇っていますが、純粋なAS3アプリケーションでFlexライブラリが初期化されていないため、createText()(あなたの場合はresources::BugattiVeyron_Text_2126220941/createText())の呼び出しの結果エラーが発生しているようです。最も簡単な解決策は、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(); 
} 

(詳細:[Possible to use Flex Framework/Components without using MXML?ために「必要な更新を探します。 Flex 4」セクションを参照してください。)

また、Flexライブラリのランタイムオーバーヘッドを必要としない場合は、FXGを編集してテキストをパスに変換できます。これはAS3のみのプロジェクトではうまくいくはずですが、同様の問題に遭遇した他のFXG機能があれば驚くことはありません。

関連する問題