Моя ошибка # 1010 ситуация - PullRequest
       6

Моя ошибка # 1010 ситуация

6 голосов
/ 17 августа 2011

Редактировать 3: Хорошо, я освещаю виртуальную машину Windows Server 2008 R2, устанавливаю Flex Builder 3 и проверяю, могу ли я получить новый проект для правильной компиляции и выполнения. News! Я запустил IDE и запустил ее на виртуальной машине, и я STILL получил точно такую ​​же ошибку после того, как код скомпилирован без проблем!Вот большой, решительный удвоенный тиф эфф .

Редактировать 2: Поскольку этот пост был довольно длинным, я выложу его здесь.Я просто просмотрел и удалил каждую часть двух проблемных строк по отдельности и попытался скомпилировать после каждой, и каждый раз получал ошибку.Я даже удалил все из двух DataGridColumn с, и он все еще не скомпилировался, хотя комментирование двух пустых строк <mx:DataGridColumn /> позволит программе загрузиться!Это сводит меня с ума, кто-нибудь может пролить свет на это для меня?
/ Edit 2

У меня есть приложение AIR, которое, очевидно, будет прекрасно компилироваться, когда я нажму F5,но до того, как приложение получит возможность загрузить, я получаю следующую ошибку:

My error message.

Комментируя блоки кода, я сузил проблему до двух конкретных строк.

<mx:DataGrid id="grid1" width="100%" height="100%" editable="false">
    <mx:columns>
        <mx:DataGridColumn headerText="Symbol"                      dataField="Symbol"             headerWordWrap="true" width="100" textAlign="left"/>
        <mx:DataGridColumn headerText="Description"                 dataField="FullName"           headerWordWrap="true" width="150" textAlign="left"/>
        <mx:DataGridColumn headerText="Trans"                       dataField="TransactionCode"    headerWordWrap="true" width="75"  textAlign="center"/>
        <mx:DataGridColumn headerText="Quantity"                    dataField="Quantity"           headerWordWrap="true" width="50"  textAlign="right"  labelFunction="formatUtil3"/>
        <mx:DataGridColumn headerText="Execution Date"              dataField="ExecutionDate"      headerWordWrap="true" width="80"  textAlign="center"/>
        <mx:DataGridColumn headerText="Execution Price"             dataField="ExecutionPrice"     headerWordWrap="true" width="65"  textAlign="right"  labelFunction="formatUtil1"/>
        <mx:DataGridColumn width="15" backgroundColor="0x888888" dataField="blank1" headerText=""/>
        <mx:DataGridColumn headerText="Previous Business Day"       dataField="PreviousDate"       headerWordWrap="true" width="80"  textAlign="center"                             itemRenderer="PD5"/>
<!---->     <mx:DataGridColumn headerText="Previous Business Day Price" dataField="PreviousDatePrice"  headerWordWrap="true" width="65"  textAlign="right"  labelFunction="formatUtil1" itemRenderer="PD5"/>
<!---->     <mx:DataGridColumn headerText="% Difference"                dataField="PreviousDateDelta"  headerWordWrap="true" width="65"  textAlign="right"  labelFunction="formatUtil2" itemRenderer="PD5"/>
        <mx:DataGridColumn headerText="Source"                      dataField="PreviousDateSource" headerWordWrap="true" width="100" textAlign="left"                               itemRenderer="PD5"/>
        <mx:DataGridColumn width="15" backgroundColor="0x888888" dataField="blank2" headerText=""/>
        <mx:DataGridColumn headerText="Previous Month End"          dataField="PrevMonthEndDate"   headerWordWrap="true" width="80"  textAlign="center"                             itemRenderer="PME5"/>
        <mx:DataGridColumn headerText="Previous Month End Price"    dataField="PrevMonthEndPrice"  headerWordWrap="true" width="65"  textAlign="right"  labelFunction="formatUtil1" itemRenderer="PME5"/>
        <mx:DataGridColumn headerText="% Difference"                dataField="PrevMonthEndDelta"  headerWordWrap="true" width="65"  textAlign="right"  labelFunction="formatUtil2" itemRenderer="PME5"/>
        <mx:DataGridColumn headerText="Source"                      dataField="PrevMonthEndSource" headerWordWrap="true" width="100" textAlign="left"                               itemRenderer="PME5"/>
    </mx:columns>
</mx:DataGrid>

Две строки помечены <!---->.Если я прокомментирую эти две строки, приложение будет правильно скомпилировано, запущено и отображено, но если я оставлю любую из них активной, я получу сообщение об ошибке выше.

Что здесь происходит?

Редактировать: Дополнительный код по запросу -

<mx:CurrencyFormatter id="format1" precision="5" useNegativeSign="false"/>
<mx:NumberFormatter   id="format2" precision="2"/>

И функции -

private function formatUtil1(item:Object, column:DataGridColumn):String
{
    var Field:Object = item[column.dataField];
    return format1.format(Field);
}

private function formatUtil2(item:Object, column:DataGridColumn):String
{
    var Field:Object = item[column.dataField];
    return format2.format(Field);
}

Далее .as файл для PD5 -

package
{
    import mx.controls.Label;
    import mx.controls.listClasses.*;

    public class PD5 extends Label
    {
        private const POSITIVE_COLOR:uint = 0x000000; // Black
        private const NEGATIVE_COLOR:uint = 0xFF0000; // Red 

        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
        {
            super.updateDisplayList(unscaledWidth, unscaledHeight);
            setStyle("color", (data.PreviousDateDelta >= 5 || data.PreviousDateDelta <= -5) ? NEGATIVE_COLOR : POSITIVE_COLOR);
        }
    }
}

А теперь PME5.as -

package
{
    import mx.controls.Label;
    import mx.controls.listClasses.*;

    public class PME5 extends Label
    {
        private const POSITIVE_COLOR:uint = 0x000000; // Black
        private const NEGATIVE_COLOR:uint = 0xFF0000; // Red

        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
        {
            super.updateDisplayList(unscaledWidth, unscaledHeight);
            setStyle("color", (data.PrevMonthEndDelta >= 5 || data.PrevMonthEndDelta <= -5) ? NEGATIVE_COLOR : POSITIVE_COLOR);
        }
    }
}

Ответы [ 4 ]

3 голосов
/ 12 сентября 2011

Запустите приложение в режиме отладки.При возникновении ошибки Flex Builder (Flash Builder 4.5 является самой новой версией) ломается и переносит вас на строку кода, которая вызывает проблему.Это происходит потому, что некоторый объект, свойство которого вы пытаетесь получить, на самом деле имеет значение null.

Вы можете просматривать дерево вызовов вверх и вниз в окне отладки (меню «Окно»> «Отладка»), и таким образом вы можете узнать, какиеобъект является нулевым.

В основном это происходит потому, что поставщик данных не завершен, т.е. отсутствуют некоторые данные.например, одна строка может не иметь бизнес-цены предыдущего дня.Если это так, то вам нужно обработать нулевой элемент в ваших функциях formatUtil

var field:Object=item[column.dataField];
if(field!=null) {
    return format1.format(field);
} else {
    return "";
}

EDIT:
Также проверьте эти две строки:

setStyle("color", (data.PrevMonthEndDelta >= 5 || data.PrevMonthEndDelta <= -5) ? NEGATIVE_COLOR : POSITIVE_COLOR);

и

setStyle("color", (data.PreviousDateDelta >= 5 || data.PreviousDateDelta <= -5) ? NEGATIVE_COLOR : POSITIVE_COLOR);

Возможно, ошибка происходит от data.PreviousDateDelta или data.PrevMonthEndDelta

0 голосов
/ 18 октября 2011

Поскольку до сих пор ничего не решило мою проблему, я решил вообще обойти ее и перенести соответствующую программу на C #.Пока все работает хорошо.

Ленивый ответ?Да.
Ленивое решение?К сожалению нет.

0 голосов
/ 09 сентября 2011

Здесь все хорошо.Ничего не изменилось, но добавлены данные по умолчанию.

<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">

    <fx:Script>
        <![CDATA[
            private function formatUtil1(item:Object, column:DataGridColumn):String
            {
                var Field:Object = item[column.dataField];
                return format1.format(Field);
            }

            private function formatUtil2(item:Object, column:DataGridColumn):String
            {
                var Field:Object = item[column.dataField];
                return format2.format(Field);
            }

            private function formatUtil3(item:Object, column:DataGridColumn):String
            {
                return formatUtil2(item, column);
            }
        ]]>
    </fx:Script>

    <fx:Declarations>
        <mx:NumberFormatter   id="format2" precision="2"/>
        <mx:CurrencyFormatter id="format1" precision="5" useNegativeSign="false"/>
    </fx:Declarations>

    <mx:DataGrid id="grid1" width="100%" height="100%" editable="false">

        <mx:ArrayCollection>
            <mx:source>
                <fx:Object
                    Symbol="€"
                    FullName="Name"
                    TransactionCode="121345"
                    Quantity="10"
                    ExecutionDate="10.10.2011"
                    ExecutionPrice="1.5"

                    PreviousDate="09.10.2011"
                    PreviousDatePrice="1.4"
                    PreviousDateDelta="10"
                    PreviousDateSource="0.1"

                    PrevMonthEndDate="0.1"
                    PrevMonthEndPrice="0.1"
                    PrevMonthEndDelta="-10"
                    PrevMonthEndSource="0.1"
                />
                <fx:Object
                    Symbol="€"
                    FullName="Name2"
                    TransactionCode="121345"
                    Quantity="10"
                    ExecutionDate="10.10.2011"
                    ExecutionPrice="1.5"

                    PreviousDate="09.10.2011"
                    PreviousDatePrice="1.4"
                    PreviousDateDelta="4"
                    PreviousDateSource="0.1"

                    PrevMonthEndDate="0.1"
                    PrevMonthEndPrice="0.1"
                    PrevMonthEndDelta="4"
                    PrevMonthEndSource="0.1"
                />
            </mx:source>
      </mx:ArrayCollection>

        <mx:columns>
            <mx:DataGridColumn headerText="Symbol"                      dataField="Symbol"             headerWordWrap="true" width="100" textAlign="left"/>
            <mx:DataGridColumn headerText="Description"                 dataField="FullName"           headerWordWrap="true" width="150" textAlign="left"/>
            <mx:DataGridColumn headerText="Trans"                       dataField="TransactionCode"    headerWordWrap="true" width="75"  textAlign="center"/>
            <mx:DataGridColumn headerText="Quantity"                    dataField="Quantity"           headerWordWrap="true" width="50"  textAlign="right"  labelFunction="formatUtil3"/>
            <mx:DataGridColumn headerText="Execution Date"              dataField="ExecutionDate"      headerWordWrap="true" width="80"  textAlign="center"/>
            <mx:DataGridColumn headerText="Execution Price"             dataField="ExecutionPrice"     headerWordWrap="true" width="65"  textAlign="right"  labelFunction="formatUtil1"/>
            <mx:DataGridColumn width="15" backgroundColor="0x888888"    dataField="blank1" headerText=""/>
            <mx:DataGridColumn headerText="Previous Business Day"       dataField="PreviousDate"       headerWordWrap="true" width="80"  textAlign="center"                             itemRenderer="tmp.PD5"/>


            <mx:DataGridColumn headerText="Previous Business Day Price" dataField="PreviousDatePrice"  headerWordWrap="true" width="65"  textAlign="right"  labelFunction="formatUtil1" itemRenderer="tmp.PD5"/>
            <mx:DataGridColumn headerText="% Difference"                dataField="PreviousDateDelta"  headerWordWrap="true" width="65"  textAlign="right"  labelFunction="formatUtil2" itemRenderer="tmp.PD5"/>


            <mx:DataGridColumn headerText="Source"                      dataField="PreviousDateSource" headerWordWrap="true" width="100" textAlign="left"                               itemRenderer="tmp.PD5"/>
            <mx:DataGridColumn width="15" backgroundColor="0x888888"    dataField="blank2" headerText=""/>
            <mx:DataGridColumn headerText="Previous Month End"          dataField="PrevMonthEndDate"   headerWordWrap="true" width="80"  textAlign="center"                             itemRenderer="tmp.PME5"/>
            <mx:DataGridColumn headerText="Previous Month End Price"    dataField="PrevMonthEndPrice"  headerWordWrap="true" width="65"  textAlign="right"  labelFunction="formatUtil1" itemRenderer="tmp.PME5"/>
            <mx:DataGridColumn headerText="% Difference"                dataField="PrevMonthEndDelta"  headerWordWrap="true" width="65"  textAlign="right"  labelFunction="formatUtil2" itemRenderer="tmp.PME5"/>
            <mx:DataGridColumn headerText="Source"                      dataField="PrevMonthEndSource" headerWordWrap="true" width="100" textAlign="left"                               itemRenderer="tmp.PME5"/>
        </mx:columns>
    </mx:DataGrid>


</s:Application>
0 голосов
/ 17 августа 2011

Ничто не выделяется в коде как плохое.
Очевидно, это непроверенный код.
У меня есть ощущение, что ваш поставщик данных не является полным или отсутствуют данные. Вероятно, из-за 1 из этих строк.

// no validation is being done so this can be a failure point
var Field:Object = item[column.dataField];
return format1.format(Field);
return format2.format(Field);

Вот код, который вы можете попробовать протестировать на вашем провайдере данных

import flash.debugger.enterDebugger;

private function formatUtil1(item:Object, column:DataGridColumn):String
{
  try{
    if (item[column.dataField] ){
      var Field:Object = item[column.dataField];
      var retVal:String = format1.format(Field)
      if( retVal == null || retVal == undefined ){
        //return '';
        enterDebugger()
      }
    }else{
      //return '';
      enterDebugger()
    }
  }catch(e:error){
    //return '';
    enterDebugger()
  }
  return retVal;
}

private function formatUtil2(item:Object, column:DataGridColumn):String
{
  try{
    if (item[column.dataField] ){
      var Field:Object = item[column.dataField];
      var retVal:String = format2.format(Field);
      if( retVal == null || retVal == undefined ){
        //return '';
        enterDebugger()
      }
    }else{
      //return '';
      enterDebugger()
    }
  }catch(e:error){
    //return '';
    enterDebugger()
  }
  return retVal;
}

То же самое можно применить к рендерерам

package
{
    import mx.controls.Label;
    import mx.controls.listClasses.*;

    public class PME5 extends Label
    {
        private const POSITIVE_COLOR:uint = 0x000000; // Black
        private const NEGATIVE_COLOR:uint = 0xFF0000; // Red

        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
        {
            super.updateDisplayList(unscaledWidth, unscaledHeight);
// are you 100% sure data.PrevMonthEndDelta exists on the data object????

if (data != null && data.PreviousDateDelta ){
            setStyle("color", (data.PrevMonthEndDelta >= 5 || data.PrevMonthEndDelta <= -5) ? NEGATIVE_COLOR : POSITIVE_COLOR);
}
        }
    }
}
...