반응형
application 이나 component 에서 swfLoader 를 사용하여 swf 를 호출하는 경우
모든 케이스가 테스트된것은 아니지만 chartBase 컴포넌트를 사용하는 swf 가 n 개 이상 있는 경우
런타임 에러가 발생합니다.
(아래 오류는 중복된 챠트를 사용해서 그렇고 다른 챠트 swf 만 있을 경우에는 좀 다른 에러가 발생합니다.)
해결방안(?)은 아래 붉은 글씨로 표기된 부분을 참고하시면 됩니다.
* 비슷한 사례로 올라온 내용이 있습니다. 아래 url 을 참고하세요.
Runtime Error Painting Screen for Embedded App
http://www.nabble.com/Runtime-Error-Painting-Screen-for-Embedded-App-to9442490.html
Modules - Alex Harui
http://blogs.adobe.com/aharui/2007/03/modules.html
아래 샘플로 테스트 해보실 수 있습니다.
혹 정확한 내용을 이해하고 계신분들은 댓글로...ㅎㅎ
# loaderTest.mxml
# ChartDemo_1.mxml - 어떤 챠트가 들어가든지 상관없습니다.ㅎㅎ
모든 케이스가 테스트된것은 아니지만 chartBase 컴포넌트를 사용하는 swf 가 n 개 이상 있는 경우
런타임 에러가 발생합니다.
(아래 오류는 중복된 챠트를 사용해서 그렇고 다른 챠트 swf 만 있을 경우에는 좀 다른 에러가 발생합니다.)
TypeError: Error #1034: 유형 강제 변환에 실패했습니다.
mx.core::ClassFactory@674d701을(를) mx.core.IFactory(으)로 변환할 수 없습니다.
at mx.charts.series::BarSeries/get legendData()[E:\dev\flex_201_borneo\sdk\frameworks\mx\charts\series\BarSeries.as:178]
177 if (markerFactory == null)
178 markerFactory = getStyle("itemRenderer");
mx.core::ClassFactory@674d701을(를) mx.core.IFactory(으)로 변환할 수 없습니다.
at mx.charts.series::BarSeries/get legendData()[E:\dev\flex_201_borneo\sdk\frameworks\mx\charts\series\BarSeries.as:178]
177 if (markerFactory == null)
178 markerFactory = getStyle("itemRenderer");
해결방안(?)은 아래 붉은 글씨로 표기된 부분을 참고하시면 됩니다.
* 비슷한 사례로 올라온 내용이 있습니다. 아래 url 을 참고하세요.
Runtime Error Painting Screen for Embedded App
http://www.nabble.com/Runtime-Error-Painting-Screen-for-Embedded-App-to9442490.html
Modules - Alex Harui
http://blogs.adobe.com/aharui/2007/03/modules.html
아래 샘플로 테스트 해보실 수 있습니다.
혹 정확한 내용을 이해하고 계신분들은 댓글로...ㅎㅎ
# loaderTest.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.charts.chartClasses.ChartBase;
//아래 부분이 중요한 내용입니다.
//주석을 풀어주면 런타임 오류가 발생하지 않고 주석을 해주면 오류가 발생합니다.
//다른 해결방안으로는 swfLoader 가 실행되는 순서를 순차적으로 발생시키도 됩니다.
//예상하기로는 서로 같은 모듈이 동시에 올라오면서 충돌하는 현상이 아닌가 합니다.
//public var cbase:ChartBase;
]]>
</mx:Script>
<mx:Panel title="SWFLoader Control Example" height="90%" width="90%"
paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10">
<mx:Label text="The Label control of the outer application."/>
<mx:VBox width="100%" height="100%">
<mx:SWFLoader id="Load_1" source="@Embed(source='ChartDemo_1.swf')" height="100%" width="100%"/>
<mx:SWFLoader id="Load_2" source="@Embed(source='ChartDemo_2.swf')" height="100%" width="100%"/>
<mx:SWFLoader id="Load_1_2" source="@Embed(source='ChartDemo_1.swf')" height="100%" width="100%"/>
</mx:VBox>
</mx:Panel>
</mx:Application>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.charts.chartClasses.ChartBase;
//아래 부분이 중요한 내용입니다.
//주석을 풀어주면 런타임 오류가 발생하지 않고 주석을 해주면 오류가 발생합니다.
//다른 해결방안으로는 swfLoader 가 실행되는 순서를 순차적으로 발생시키도 됩니다.
//예상하기로는 서로 같은 모듈이 동시에 올라오면서 충돌하는 현상이 아닌가 합니다.
//public var cbase:ChartBase;
]]>
</mx:Script>
<mx:Panel title="SWFLoader Control Example" height="90%" width="90%"
paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10">
<mx:Label text="The Label control of the outer application."/>
<mx:VBox width="100%" height="100%">
<mx:SWFLoader id="Load_1" source="@Embed(source='ChartDemo_1.swf')" height="100%" width="100%"/>
<mx:SWFLoader id="Load_2" source="@Embed(source='ChartDemo_2.swf')" height="100%" width="100%"/>
<mx:SWFLoader id="Load_1_2" source="@Embed(source='ChartDemo_1.swf')" height="100%" width="100%"/>
</mx:VBox>
</mx:Panel>
</mx:Application>
# ChartDemo_1.mxml - 어떤 챠트가 들어가든지 상관없습니다.ㅎㅎ
<?xml version="1.0"?>
<!-- Simple example to demonstrate the BarChart controls. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var medalsAC:ArrayCollection = new ArrayCollection( [
{ Country: "USA", Gold: 35, Silver:39, Bronze: 29 },
{ Country: "China", Gold: 32, Silver:17, Bronze: 14 },
{ Country: "Russia", Gold: 27, Silver:27, Bronze: 38 } ]);
]]>
</mx:Script>
<mx:Panel title="BarChart Controls Example"
height="100%" width="100%" layout="horizontal">
<mx:BarChart id="bar" height="100%" width="45%"
paddingLeft="5" paddingRight="5"
showDataTips="true" dataProvider="{medalsAC}">
<mx:verticalAxis>
<mx:CategoryAxis categoryField="Country"/>
</mx:verticalAxis>
<mx:series>
<mx:BarSeries yField="Country" xField="Gold" displayName="Gold"/>
<mx:BarSeries yField="Country" xField="Silver" displayName="Silver"/>
<mx:BarSeries yField="Country" xField="Bronze" displayName="Bronze"/>
</mx:series>
</mx:BarChart>
<mx:Legend dataProvider="{bar}"/>
</mx:Panel>
</mx:Application>
<!-- Simple example to demonstrate the BarChart controls. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var medalsAC:ArrayCollection = new ArrayCollection( [
{ Country: "USA", Gold: 35, Silver:39, Bronze: 29 },
{ Country: "China", Gold: 32, Silver:17, Bronze: 14 },
{ Country: "Russia", Gold: 27, Silver:27, Bronze: 38 } ]);
]]>
</mx:Script>
<mx:Panel title="BarChart Controls Example"
height="100%" width="100%" layout="horizontal">
<mx:BarChart id="bar" height="100%" width="45%"
paddingLeft="5" paddingRight="5"
showDataTips="true" dataProvider="{medalsAC}">
<mx:verticalAxis>
<mx:CategoryAxis categoryField="Country"/>
</mx:verticalAxis>
<mx:series>
<mx:BarSeries yField="Country" xField="Gold" displayName="Gold"/>
<mx:BarSeries yField="Country" xField="Silver" displayName="Silver"/>
<mx:BarSeries yField="Country" xField="Bronze" displayName="Bronze"/>
</mx:series>
</mx:BarChart>
<mx:Legend dataProvider="{bar}"/>
</mx:Panel>
</mx:Application>
728x90