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 并通过 flash 添加它(帮助>管理 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

好的 - 所以,在尝试了很多事情之后,我弄清楚了为什么会发生这种情况。

解决方案:在运行 AIR 3.5 SDK 时去掉所有 TFL 文本对象

似乎 TFL 文本库在运行时未正确加载。我没有提到的重要一点是我收到了这条警告消息(类似这里http://forums.adobe.com/thread/825637)内容不会流式传输...预加载的运行时共享库​​是 textLayout_1.0.0。 05... TFL文本

以及输出中的此警告消息

警告:忽略来自http://fpdownload.adobe.com/pub/swz/crossdomain.xml的策略文件中的“安全”属性。'secure' 属性只允许在 HTTPS 和套接字策略文件中使用。

只需删除所有 TFLText 对象并将它们更改为经典文本即可使应用程序再次正常工作。

于 2012-12-04T01:31:31.827 回答
1

@csomakk 好消息。我找到了答案。您可以在 3.5 和 3.6 中发布并拥有您的 TLF 文本。我在我的博客上发表了一篇文章,详细说明了如何做到这一点

于 2013-03-05T17:55:11.587 回答
0

开始:错误消息指出某些东西是空的。这意味着程序不知道在哪里寻找它。当您没有创建对象时,可能会发生这种情况 (btn_hex_37b = new MovieClip()); 或者你甚至没有为它创建一个变量。

在给定的行 (btn_hex_37b.addEventListener(MouseEvent.CLICK, onBtnHex37bClick);) 上,只有 btn_hex_37b 可以为空,因为 onBtnHex37bClick 存在,如果不存在,程序将无法编译。

切换到 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 是否不为空。在 else 方法上,您可以提供一个超时的方法(但这很难看),或者在创建对象后立即提供事件监听器。

希望这有帮助。

于 2012-12-03T12:17:14.213 回答
0

对于 Flash CS6,复制此 swc:/Applications/Adobe Flash CS6/Common/Configuration/ActionScript 3.0/libs/flash.swc

使用以下步骤进入我的 Flash Builder 项目:http: //interactivesection.files.wordpress.com/2009/06/include_fl_packages_in_flex_builder-1.jpg

然后使用此链接 http://curtismorley.com/2013/03/05/app-used-to-work-with-air-3-2-or-3-4-doesnt-work-with-air-3 -5-或-3-6/#comment-241102

于 2013-06-20T11:40:45.710 回答