当我按下一个flash/air应用程序中的按钮时,我收到了这个错误,该应用程序曾在air 3.2 SDK中工作,现在已升级到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导出。我还安装了AIR3.5运行时。
这个应用程序目前非常简单。当您使用gotoAndPlay(frameNr)功能按下按钮时,它基本上会从一帧移动到另一帧。框架上有一些六角体,当单击时会更新数字数组。它们还可以切换为可见/不可见。
这曾经使用AIR3.2SDK非常有效,但我最近从adobe下载了AIR3.5SDK,并通过flash添加了它(帮助>管理AIRSDK),并在文件>发布设置>目标中将其设置为构建目标。
当我切换回AIR3.2SDK时,该应用程序再次完美运行。
此外,当我使用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);
好吧,所以,在尝试了很多事情之后,我明白了为什么会发生这种情况。
解决方案:在运行AIR 3.5 SDK 时清除所有TFL文本对象
TFL文本库似乎在运行时没有正确加载。我忽略了一件重要的事情,那就是我收到了这个警告信息(类似于这里http://forums.adobe.com/thread/825637)内容不会流式传输。。。正在预加载的运行时共享库为textLayout_1.0.0.05…TFLText
以及输出中的此警告消息
警告:忽略来自的策略文件中的"secure"属性http://fpdownload.adobe.com/pub/swz/crossdomain.xml.只有HTTPS和套接字策略文件中才允许使用"secure"属性。
只需删除所有TFLText对象并将其更改为经典文本,应用程序就能再次正常工作。
@csomakk好消息。我找到了答案。您可以在3.5和3.6中发布,也可以拥有TLF文本。我在博客上写了一篇文章,展示了如何做到这一点
开始:错误消息表明某个东西为null。。这意味着,程序不知道在哪里寻找它。当你没有创建对象时,可能会发生这种情况(btn_hex_37b=new MovieClip());或者你甚至还没有为它创建一个变量。
在给定的行上(btn_hex_37b.addEventListener(MouseEvent.CLICK,onBtnHex37bClick);)只有btn_hex_37b可以为null,因为onBtnHex37bClick存在,如果不存在,程序就不会编译。
当切换到AIR3.5时,它出现的原因可能是它以不同的顺序调用了一些创建函数。转到定义btn_hex_37b变量的行。搜索调用..的函数。。请确保在转到第7帧之前创建了btn_hex_37b。
此外,如果它不是至关重要的,要想在Btn_hex_37bClick上单击,您可以执行以下操作:
if(btn_hex_37b){
btn_hex_37b.addEventListener(MouseEvent.CLICK, onBtnHex37bClick);
}
if将检查btn_hex37b是否为空。在else方法上,您可以给出一个超时的方法(但这很难看),或者在创建对象后立即给出eventlistener。
希望这能有所帮助。
对于Flash CS6,复制以下swc:/应用程序/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-or-3-6/#comment-241102