使用自定义火花皮肤标记元素时的null引用

时间:2011-11-15 23:14:53

标签: flash actionscript null flex-spark

我已经将我的mxml简化为2个元素,一个Button和一个CheckBox。该按钮上有一个非常简单的自定义皮肤,有3种状态只是直接从swc加载(BackButtonUp,BackButtonMouseover和BackButtonClick)。一切都很好,如果你使用鼠标就可以工作。如果你通过TAB完成所有事情,就会崩溃。

我已经针对flex sdk 4.5和4.5.1进行了编译。两者都给出相同的结果。设计模式或动作脚本本身都没有警告/错误。我不知道什么是错的,因为堆栈跟踪没有给我任何我自己的代码。

如果我将皮肤改为<s:Rect>个对象,那么一切正常。只有当我使用加载的swc符号时它才会崩溃。

崩溃时出现以下异常(点击TAB 6次后):

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at fl.text::TLFRuntimeTabManager$/onKeyFocusChange()[F:\stage\Flash11.5_Main_325_Stage\main\authortool\Stage\tlfRuntime\fl\text\TLFRuntimeTabManager.as:73]

这是我的应用程序mxml:

<?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:mx="library://ns.adobe.com/flex/mx" 
           width="400" height="400">
    <s:layout>
        <s:BasicLayout/>
    </s:layout>

    <s:Button x="10" y="10" skinClass="skins.BackButton" />
    <s:CheckBox x="10" y="100" />
</s:Application>

这是我的自定义皮肤mxml是.swc文件中符号的名称):

<?xml version="1.0" encoding="utf-8"?>
<s:SparkButtonSkin 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
    minWidth="21" minHeight="21" 
    alpha.disabled="0.5" 
    xmlns:local="*" >

    <fx:Metadata>
        <![CDATA[ [HostComponent("spark.components.Button")] ]]>
    </fx:Metadata>

    <!-- states -->
    <s:states>
        <s:State name="up" />
        <s:State name="over" />
        <s:State name="down" />
        <s:State name="disabled" />
    </s:states>

    <local:BackButtonUp id="buttonUp" includeIn="up, disabled"/>
    <local:BackButtonMouseover id="buttonOver" includeIn="over"/>
    <local:BackButtonClick id="buttonDown" includeIn="down"/>
</s:SparkButtonSkin>

2 个答案:

答案 0 :(得分:1)

我主要在Flash CS5中工作,但我遇到了一个非常类似的问题。从您的代码看起来您​​只是为up,down,over和disabled设置外观。当您浏览元素时,它实际上会选择它们,但您没有设置任何选定的外观,因此它会出错。尝试设置“selectedUpSkin”,“selectedDownSkin”,“selectedOverSkin”和“selectedDisabledSkin”。我认为应该解决你的问题。

答案 1 :(得分:0)

这是CS 5.5和CS6中的TLF问题。只需在文本中更改为经典文本,它就可以正常工作。