1

以前は AIR 3.2 SDK で動作していた flash/air アプリのボタンを押すと、このエラーが発生します。現在は AIR 3.5 SDK にアップグレードされています。どんな助けでも大歓迎です。

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at seed_template_fla::MainTimeline/frame7()[seed_template_fla.MainTimeline::frame7:31]
    at flash.display::MovieClip/gotoAndPlay()
    at seed_template_fla::MainTimeline/gotoPage()    [seed_template_fla.MainTimeline::frame1:20]
    at seed_template_fla::MainTimeline/gotoRepro()    [seed_template_fla.MainTimeline::frame1:12]

Mac で Flash CS6 を使用して iPhone 用のアプリを作成し、Air 3.5 SDK を使用してエクスポートしています。AIR 3.5 ランタイムもインストールされています。

アプリは現時点では非常にシンプルです。gotoAndPlay(frameNr) 関数を使用してボタンを押すと、基本的にフレームからフレームに移動します。フレームには、クリックすると数値の配列を更新するヘックスがいくつかあります。また、表示/非表示を切り替えます。

これは以前は AIR 3.2 SDK を使用して完全に機能していましたが、最近、Adobe から AIR 3.5 SDK をダウンロードし、フラッシュ ([ヘルプ] > [Air SDK の管理]) を介して追加し、[ファイル] > [パブリッシュ設定] > [ターゲット] でビルド ターゲットとして設定しました。

AIR 3.2 SDK に戻すと、アプリは再び完全に機能します。

また、AIR 3.5 SDK を使用して、IOS 5.1 を実行している iPhone 4S にアプリをアップロードすると、5 つの読み込みドットが点滅する黒い画面が表示されます。これは、AIR 3.2 SDK でも正常に機能します。

これはフレーム 7 のコードです。最後の行は 31 行目です。

stop();
techtitle.text = "Select Trait";
techdesc.text = "Spend points to change core stats and other special abilities";
points.visible = false;
techpoints.visible=false;
pointsbalance.text = myPoints.toString();
btn_tech.visible = false;
curTechSelected = null;

trace("set hexes invisible");
for (var j:int = 0; j <= 67; j++) {
    if (hexStatusb[j] == 1) {
        this["btn_hex_"+j+"b"].visible = false;
    }
}

function onBtnHex37bClick(event:MouseEvent):void
{
    techtitle.text = "tech1";
    techdesc.text = "tech1 description"
    techpoints.text = "-2";
points.visible = true;
techpoints.visible=true;
btn_tech.visible = true;
curTechSelected = btn_hex_37b;
curTechSelectedNr = 37;
curTechPoints = 2;
}

trace(this["btn_hex_37b"]);
btn_hex_37b.addEventListener(MouseEvent.CLICK, onBtnHex37bClick);
4

4 に答える 4

1

@csomakk すばらしいニュースです。私は答えを見つけました。3.5 および 3.6 で公開し、TLF テキストも使用できます。その方法を正確に示した記事をブログに投稿しました。

于 2013-03-05T17:55:11.587 に答える
1

OK - それで、いろいろ試した結果、なぜこれが起こっているのかがわかりました。

解決策:AIR 3.5 SDK の実行時にすべての TFL テキスト オブジェクトを削除します。

実行時に TFL Text ライブラリが適切にロードされていないようです。私が言及しなかった重要なことは、この警告メッセージが表示されたことです (ここで同様のhttp://forums.adobe.com/thread/825637 ) コンテンツはストリーミングされません... プリロードされているランタイム共有ライブラリは textLayout_1.0.0 です。 05... TFLテキスト

出力のこの警告メッセージ

警告: http://fpdownload.adobe.com/pub/swz/crossdomain.xmlからのポリシー ファイルの「secure」属性を無視します。「secure」属性は、HTTPS およびソケット ポリシー ファイルでのみ許可されます。

すべての TFLText オブジェクトを削除して従来のテキストに変更するだけで、アプリは正常に動作するようになります。

于 2012-12-04T01:31:31.827 に答える
0

はじめに:エラーメッセージには、何かがnullであることが示されています。これは、プログラムがどこでそれを探すべきかわからないことを意味します。オブジェクトを作成しなかった場合に発生する可能性があります(btn_hex_37b = new MovieClip()); または、そのための変数を作成していません。

指定された行(btn_hex_37b.addEventListener(MouseEvent.CLICK、onBtnHex37bClick);)では、onBtnHex37bClickが存在するため、btn_hex_37bのみがnullになり、存在しない場合、プログラムはコンパイルされません。

AIR 3.5に切り替えたときに出てきたのは、おそらくいくつかの作成関数を異なる順序で呼び出すためです。btn_hex_37b変数を定義する行に移動します。その関数の呼び出しを検索します。frame7に進む前に、btn_hex_37bが作成されていることを確認してください。

また、重要ではない場合は、onBtn_hex_37bClickを使用して、次の操作を実行できます。

if(btn_hex_37b){
    btn_hex_37b.addEventListener(MouseEvent.CLICK, onBtnHex37bClick);
}

ifは、btn_hex_37bがnullでないかどうかをチェックします。elseメソッドでは、タイムアウトされたメソッドを指定するか(ただし、これは醜いです)、オブジェクトの作成直後にeventlistenerを指定できます。

これがお役に立てば幸いです。

于 2012-12-03T12:17:14.213 に答える