2012-12-02 58 views
1

我在AIR 3.2 SDK中使用的Flash/Air应用程序中按下按钮时出现此错误 - 现在已升级到AIR 3.5 SDK。任何帮助非常感谢。用于与AIR 3.2配合使用的应用程序,不适用于AIR 3.5

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); 

回答

1

好的 - 所以,在尝试了很多东西之后,我想出了为什么会发生这种情况。

解决方法:在运行AIR 3.5 SDK时摆脱所有TFL文本对象的

看来,TFL文本库没有被正确地在运行时加载。我忽略了一些至关重要的事情,那就是我收到了这条警告信息(类似于http://forums.adobe.com/thread/825637) 内容不会流...预加载的运行时共享库​​为textLayout_1.0.0.05 ...TFLText

,并在输出

警告此警告消息:无视http://fpdownload.adobe.com/pub/swz/crossdomain.xml“安全”的政策文件属性。 “安全”属性只能在HTTPS和套接字策略文件中使用。

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

+0

虽然说上述 - 仍然不能解释为什么按钮返回null,因为按钮从未包含任何TFLText ...任何想法? – user1871200

+0

这帮助我了!我本来可以在这上面花几天时间。谢谢!! –

0

要开始:该错误消息指出什么是空..这意味着,程序不知道,在哪里寻找它。它可能发生,当你没有创建对象(btn_hex_37b = new MovieClip());或者你甚至没有为它创建一个变量。

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

切换到AIR 3.5时出现的原因可能是它以不同的顺序调用某些创建函数。转到您定义btn_hex_37b变量的行。搜索该函数调用..确保,btn_hex_37b是在创建frame7之前创建的。

而且,如果它不是一个重要的,有onBtn_hex_37bClick,你可以做到以下几点:

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

的,如果将检查btn_hex_37b不为空。 在else方法上,可以给出一个超时的方法(但这很丑),或者在创建对象后立即给予eventlistener。

希望这有助于。

+0

谢谢,我一直在寻找你在你的回复中突出显示的内容。有一件事是,btn_hex_37b从未在代码中定义过 - 它是框架7中按钮之一的实例名称。我总是假定框架及其元素将首先构造,然后是实例名称赋值,并且只有在,任何相关的动作脚本都会被调用 - 因此应该可以在代码中引用'btn_hex_37b'实例而不声明它,因为我已经在该按钮的WYSIWYG属性编辑器中执行了此操作。 – user1871200

+0

那么你应该使用settimeout(100,addListenertohex37),并将addListener37函数定义为突出显示的代码。丑陋的,但如添加代码帧。它会使它的工作.. – csomakk

1

@csomakk好消息。我找到了答案。您可以在3.5和3.6中发布,并且也可以使用您的TLF文本。我在我的博客上发布了一篇文章,内容正好显示为how to do it