2011-09-21 42 views
0

當我使用Flex SDK 4.0或4.1編譯Flex項目時,沒有任何問題。但是當我切換到SDK 4.5(因爲我們的團隊開始使用Flash Builder 4.5),我在打開一個窗口(彈出一個窗口小部件窗口)時出錯。我在網上搜索了幾天,但仍然不知道是什麼導致了這個問題。Flex ArgumentError:Error#2015:Invalid BitmapData

請幫忙。

以下是錯誤消息:

ArgumentError: Error #2015: Invalid BitmapData. 
at flash.display::BitmapData/ctor() 
at flash.display::BitmapData() 
at spark.effects.supportClasses::AnimateTransitionShaderInstance/play() 
at spark.effects.supportClasses::AnimateInstance/startEffect() 
at mx.effects::Effect/play() 
at mx.core::UIComponent/commitCurrentState() 
at mx.core::UIComponent/commitProperties() 
at spark.components.supportClasses::GroupBase/commitProperties() 
at spark.components::Group/commitProperties() 
at mx.core::UIComponent/validateProperties() 
at spark.components::Group/validateProperties() 
at mx.managers::LayoutManager/validateProperties() 
at mx.managers::LayoutManager/doPhasedInstantiation() 
at mx.managers::LayoutManager/doPhasedInstantiationCallback() 

這裏是MXML:

<?xml version="1.0" encoding="utf-8"?> 
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx"> 
    <!-- host component --> 
    <fx:Metadata> 
     [HostComponent("widgets.BatchGeocoder.components.AddressMapper")] 
    </fx:Metadata> 

    <!-- SkinParts 
    name=ddlCityField, type=spark.components.DropDownList, required=true 
    name=ddlCountryField, type=spark.components.DropDownList, required=true 
    name=ddlAddressField, type=spark.components.DropDownList, required=true 
    name=ddlStateField, type=spark.components.DropDownList, required=true 
    name=ddlZipField, type=spark.components.DropDownList, required=true 
    name=btnSubmit, type=spark.components.Button, required=true 
    --> 
    <s:layout> 
     <s:VerticalLayout gap="5" 
          horizontalAlign="center" /> 
    </s:layout> 
    <s:Group width="100%" 
      height="100%"> 
     <s:Label x="5" 
       y="10" 
       text="Address: " /> 
     <s:DropDownList x="100" 
         y="5" 
         id="ddlAddressField"/> 
     <s:Button x="250" 
        y="5" 
        label="x" 
        fontSize="4" 
        width="22" 
        height="22" 
        toolTip="Reset Address Field" 
        skinClass="widgets.BatchGeocoder.components.skins.RefreshButtonSkin" 
        click="ddlAddressField.selectedIndex = -1" /> 

     <s:Label x="5" 
       y="40" 
       text="City: " /> 
     <s:DropDownList x="100" 
         y="35" 
         id="ddlCityField"/> 
     <s:Button x="250" 
        y="35" 
        label="x" 
        fontSize="4" 
        width="22" 
        height="22" 
        toolTip="Reset City Field" 
        skinClass="widgets.BatchGeocoder.components.skins.RefreshButtonSkin" 
        click="ddlCityField.selectedIndex = -1"/> 

     <s:Label x="5" 
       y="70" 
       text="State: " /> 
     <s:DropDownList x="100" 
         y="65" 
         id="ddlStateField"/> 
     <s:Button x="250" 
        y="65" 
        label="x" 
        fontSize="4" 
        width="22" 
        height="22" 
        toolTip="Reset State Field" 
        skinClass="widgets.BatchGeocoder.components.skins.RefreshButtonSkin" 
        click="ddlStateField.selectedIndex = -1" /> 

     <s:Label x="5" 
       y="100" 
       text="Zip: " /> 
     <s:DropDownList x="100" 
         y="95" 
         id="ddlZipField"/> 
     <s:Button x="250" 
        y="95" 
        label="x" 
        fontSize="4" 
        width="22" 
        height="22" 
        toolTip="Reset Zip Code Field" 
        skinClass="widgets.BatchGeocoder.components.skins.RefreshButtonSkin" 
        click="ddlZipField.selectedIndex = -1" /> 

     <s:Label x="5" 
       y="130" 
       text="Country: " /> 
     <s:DropDownList x="100" 
         y="125" 
         id="ddlCountryField"/> 
     <s:Button x="250" 
        y="125" 
        label="x" 
        fontSize="4" 
        width="22" 
        height="22" 
        toolTip="Reset Country Field" 
        skinClass="widgets.BatchGeocoder.components.skins.RefreshButtonSkin" 
        click="ddlCountryField.selectedIndex = -1" /> 

     <s:Label x="5" 
       y="160" 
       text="Label: " /> 
     <s:DropDownList x="100" 
         y="155" 
         id="ddlLabelField"/> 
     <s:Button x="250" 
        y="155" 
        label="x" 
        fontSize="4" 
        width="22" 
        height="22" 
        toolTip="Reset Label Field" 
        skinClass="widgets.BatchGeocoder.components.skins.RefreshButtonSkin" 
        click="ddlLabelField.selectedIndex = -1" /> 
    </s:Group> 
    <s:Button id="btnSubmit" 
       label="Done" /> 
</s:Skin> 

-------------------- ------------------------- 謝謝。我有皮膚。問題在於它與SDK 4.1協同工作的原因,而不是SDK 4.5。 這裏是皮膚的定義:

<?xml version="1.0" encoding="utf-8"?> 
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx"> 
    <!-- host component --> 
    <fx:Metadata> 
     [HostComponent("spark.components.Button")] 
    </fx:Metadata> 

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

    <!-- SkinParts 
    name=labelDisplay, type=spark.components.supportClasses.TextBase, required=false 
    --> 
    <s:Group id="holder"> 
     <s:BitmapImage source="@Embed('../../assets/images/GenericRefresh16.png')" 
         source.over="@Embed('../../assets/images/GenericRefresh16_active.png')" /> 
    </s:Group> 

    <s:transitions> 
     <s:Transition> 
      <s:CrossFade target="{holder}" /> 
     </s:Transition> 
    </s:transitions> 

</s:Skin> 

感謝。不幸的是,它不起作用。 但是你是對的,交叉淡入淡出效果導致了這個問題。我刪除了下面的代碼片段,它的工作原理。

<s:transitions> 
    <s:Transition autoReverse="true"> 
     <s:CrossFade target="{holder}"/> 
    </s:Transition> 
</s:transitions> 

任何想法。請幫忙。

+0

你的RefreshButton皮膚中有圖像嗎?如果是這樣,我認爲皮膚代碼可能更有用 – Exort

+0

**我只允許將評論添加到我的文章。我在原帖中添加了代碼。 – Alex

回答

1

從堆棧跟蹤看來,交叉淡化效果似乎是問題所在。試試這個:

<s:Group id="holder"> 
    <s:BitmapImage source="@Embed('../../assets/images/GenericRefresh16.png')" 
        visible.over="false" /> 
    <s:BitmapImage source="@Embed('../../assets/images/GenericRefresh16_active.png')" 
        visible.over="true" /> 
</s:Group> 

<s:transitions> 
    <s:Transition autoReverse="true"> 
     <s:CrossFade target="{holder}"/> 
    </s:Transition> 
</s:transitions>