我已经将我的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>
答案 0 :(得分:1)
我主要在Flash CS5中工作,但我遇到了一个非常类似的问题。从您的代码看起来您只是为up,down,over和disabled设置外观。当您浏览元素时,它实际上会选择它们,但您没有设置任何选定的外观,因此它会出错。尝试设置“selectedUpSkin”,“selectedDownSkin”,“selectedOverSkin”和“selectedDisabledSkin”。我认为应该解决你的问题。
答案 1 :(得分:0)
这是CS 5.5和CS6中的TLF问题。只需在文本中更改为经典文本,它就可以正常工作。