You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flex.apache.org by "Royer Christophe (JIRA)" <ji...@apache.org> on 2013/12/19 11:54:07 UTC
[jira] [Commented] (FLEX-32649) NPE in AxisRenderer when stacked
column chart has one data item
[ https://issues.apache.org/jira/browse/FLEX-32649?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13852802#comment-13852802 ]
Royer Christophe commented on FLEX-32649:
-----------------------------------------
A Workaround for this bug ?
I'm using LIneChart and I've same problem when displaying n series but all series have only one data item.
> NPE in AxisRenderer when stacked column chart has one data item
> ---------------------------------------------------------------
>
> Key: FLEX-32649
> URL: https://issues.apache.org/jira/browse/FLEX-32649
> Project: Apache Flex
> Issue Type: Bug
> Components: Charts
> Affects Versions: Adobe Flex SDK Previous
> Environment: Affected OS(s): All OS Platforms
> Language Found: English
> Reporter: Adobe JIRA
> Assignee: Adobe JIRA
> Priority: Minor
>
> I have been unable to create a simple test-case that reproduces this error, but I think a code inspection shows a problem. I've also been unable to get any help with a workaround on the Adobe forums or flexcoders.
> The error is a null pointer exception when a stacked column chart has a single data item.
> In AxisRenderer.as (line 2200 in sdk3.3) we find a reference to "lastLabel" which will be null if there is only one label, because it is computed as _labels[1].
> Excerpt from AxisRenderer.calcStaggeredSpacing:
>
> lastLabel = _labels[1];
>
> if (adjustable.left == false)
> {
> staggeredScale = Math.min(
> staggeredScale,
> staggeredleftGutter / (firstLabel.width / 2));
> }
>
> if (adjustable.right == false)
> {
> staggeredScale = Math.min(
> staggeredScale,
> staggeredrightGutter / (lastLabel.width / 2)); // (me) Here's where the NPE occurs.
> }
>
> Stack Crawl:
> __________
>
> TypeError: Error #1009: Cannot access a property or method of a null object reference.
> at mx.charts::AxisRenderer/calcStaggeredSpacing()[C:\work\flex\dmv_automation\proj ects\datavisualisation\src\mx\charts\AxisRenderer.as:2200]
> at mx.charts::AxisRenderer/calcRotationAndSpacing()[C:\work\flex\dmv_automation\pr ojects\datavisualisation\src\mx\charts\AxisRenderer.as:1591]
> at mx.charts::AxisRenderer/adjustGutters()[C:\work\flex\dmv_automation\projects\da tavisualisation\src\mx\charts\AxisRenderer.as:1331]
> at mx.charts::AxisRenderer/set gutters()[C:\work\flex\dmv_automation\projects\datavisualisation\src\mx\charts\ AxisRenderer.as:803]
> at mx.charts.chartClasses::CartesianChart/updateAxisLayout()[C:\work\flex\dmv_auto mation\projects\datavisualisation\src\mx\charts\chartClasses\CartesianChart.as:2 032]
> at mx.charts.chartClasses::CartesianChart/updateDisplayList()[C:\work\flex\dmv_aut omation\projects\datavisualisation\src\mx\charts\chartClasses\CartesianChart.as: 1359]
> at mx.core::UIComponent/validateDisplayList()[C:\autobuild\3.3.0\frameworks\projec ts\framework\src\mx\core\UIComponent.as:6351]
> at mx.managers::LayoutManager/validateDisplayList()[C:\autobuild\3.3.0\frameworks\ projects\framework\src\mx\managers\LayoutManager.as:622]
> at mx.managers::LayoutManager/doPhasedInstantiation()[C:\autobuild\3.3.0\framework s\projects\framework\src\mx\managers\LayoutManager.as:695]
> at Function/http://adobe.com/AS3/2006/builtin::apply()
> at mx.core::UIComponent/callLaterDispatcher2()[C:\autobuild\3.3.0\frameworks\proje cts\framework\src\mx\core\UIComponent.as:8633]
> at mx.core::UIComponent/callLaterDispatcher()[C:\autobuild\3.3.0\frameworks\projec ts\framework\src\mx\core\UIComponent.as:8573]
>
> Context from AxisRenderer:
> (Note: the second branch of the if statement is executing, thus adjustment.bottom is false which leads to the code path with the bug.)
>
> public function set gutters(value:Rectangle):void
> {
> var correctedGutters:Rectangle = value;
>
> // This check will rarely succeed, because _gutters
> // have been tweaked to represent placement.
> if (_gutters &&
> _gutters.left == correctedGutters.left &&
> _gutters.right == correctedGutters.right &&
> _gutters.top == correctedGutters.top &&
> _gutters.bottom == correctedGutters.bottom)
> {
> _gutters = correctedGutters;
> return;
> }
> else
> {
> adjustGutters(value,
> { left: false, top: false, right: false, bottom: false });
> }
> }
>
>
> I am building the series list dynamically, it's a stacked column chart, and for me the bug occurs when there is one series and one data point.
> I haven't been able to trigger the bug with the following example, which has a similar structure to my actual code.
>
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" xmlns:local="*">
>
> <mx:Script>
> <![CDATA[
> import mx.charts.series.ColumnSeries;
> import mx.charts.chartClasses.Series;
>
> [Bindable]
> public var seriesList:Array = [];
>
> public function buildSeriesList(seriesList:Array):Array {
>
> var chartSeries:Array = new Array();
>
> var index:int = 0;
> for each (var series:Object in seriesList) {
>
> var columnSeries:ColumnSeries = new ColumnSeries();
> columnSeries.dataProvider = series.items;
> columnSeries.dataFunction = myDataFunction;
> columnSeries.displayName = series.category;
> chartSeries.push( columnSeries );
> }
> return chartSeries;
> }
>
> private function categoryProvider(seriesList:Array):Array {
> if (seriesList && seriesList.length > 0)
> return (seriesList[0]).items;
> return null;
> }
>
> private function myDataFunction(series:Series, item:Object, fieldName:String):Object {
> if(fieldName == "yValue") {
> return item.value;
> }
> else if(fieldName == "xValue") {
> return item.category;
> }
> else
> return null;
> }
>
> public function shortCategoryLabel(source:String):String {
>
> return source;
> }
>
> public function longCategoryLabel(source:String):String {
>
> return source;
> }
>
> private function onRefresh(event:Event):void {
> this.seriesList = [ { category: "cat1" , items: [ { category: "Default Business Unit", value:574.1 }] }];
> }
>
> ]]
> >
> </mx:Script>
>
> <mx:Button label="Refresh" click="onRefresh(event)" />
>
> <mx:ColumnChart height="100%"
> width="100%" type="stacked" series="{this.buildSeriesList(this.seriesList)}">
>
> <mx:horizontalAxis>
> <mx:CategoryAxis id="bottomAxis2" title="Horizontal Axis"
> dataProvider="{this.categoryProvider(this.seriesList)}"
> categoryField="category"
> />
> </mx:horizontalAxis>
>
> <mx:verticalAxis>
> <mx:LinearAxis id="leftAxis2" title="Vertical Axis"/>
> </mx:verticalAxis>
>
> <mx:verticalAxisRenderers>
> <mx:AxisRenderer
> placement="left" styleName="verticalAxisRenderer"
> axis="{leftAxis2}" verticalAxisTitleAlignment="vertical"
> />
> </mx:verticalAxisRenderers>
>
> <mx:horizontalAxisRenderers>
> <mx:AxisRenderer
> placement="bottom"
> axis="{bottomAxis2}" verticalAxisTitleAlignment="flippedVertical"
> >
> </mx:AxisRenderer>
> </mx:horizontalAxisRenderers>
>
> </mx:ColumnChart>
>
>
> </mx:Application>
>
--
This message was sent by Atlassian JIRA
(v6.1.4#6159)