我的错误 #1010 情况
Posted
技术标签:
【中文标题】我的错误 #1010 情况【英文标题】:My Error #1010 situation 【发布时间】:2011-10-28 10:21:15 【问题描述】:编辑 3: 好的,我正在启动 Windows Server 2008 R2 虚拟机,安装 Flex Builder 3,并查看是否可以获得一个新项目来正确编译和执行。 新闻!我在 VM 中启动并运行了 IDE,但在代码编译没有问题后,我仍然得到了完全相同的错误!这是一个大而有力的你的开球效果加倍。
编辑 2: 由于这是一篇相当长的帖子,我将把它放在这里。我刚刚检查并分别删除了两个问题行的每个部分,并尝试在每个部分之后进行编译,但每次都出现错误。我什至从两个DataGridColumn
s 中删除了所有内容,它仍然没有编译,即使注释掉两个空的<mx:DataGridColumn />
行会让程序加载!这让我发疯了,谁能帮我解释一下?/Edit 2
我有一个 AIR 应用程序,当我按下 F5 时,它显然可以正常编译,但在应用程序有机会加载之前,我收到以下错误:
通过注释掉代码块,我将问题缩小到两个特定的行。
<mx:DataGrid id="grid1" editable="false">
<mx:columns>
<mx:DataGridColumn headerText="Symbol" dataField="Symbol" headerWordWrap="true" textAlign="left"/>
<mx:DataGridColumn headerText="Description" dataField="FullName" headerWordWrap="true" textAlign="left"/>
<mx:DataGridColumn headerText="Trans" dataField="TransactionCode" headerWordWrap="true" textAlign="center"/>
<mx:DataGridColumn headerText="Quantity" dataField="Quantity" headerWordWrap="true" textAlign="right" labelFunction="formatUtil3"/>
<mx:DataGridColumn headerText="Execution Date" dataField="ExecutionDate" headerWordWrap="true" textAlign="center"/>
<mx:DataGridColumn headerText="Execution Price" dataField="ExecutionPrice" headerWordWrap="true" textAlign="right" labelFunction="formatUtil1"/>
<mx:DataGridColumn backgroundColor="0x888888" dataField="blank1" headerText=""/>
<mx:DataGridColumn headerText="Previous Business Day" dataField="PreviousDate" headerWordWrap="true" textAlign="center" itemRenderer="PD5"/>
<!----> <mx:DataGridColumn headerText="Previous Business Day Price" dataField="PreviousDatePrice" headerWordWrap="true" textAlign="right" labelFunction="formatUtil1" itemRenderer="PD5"/>
<!----> <mx:DataGridColumn headerText="% Difference" dataField="PreviousDateDelta" headerWordWrap="true" textAlign="right" labelFunction="formatUtil2" itemRenderer="PD5"/>
<mx:DataGridColumn headerText="Source" dataField="PreviousDateSource" headerWordWrap="true" textAlign="left" itemRenderer="PD5"/>
<mx:DataGridColumn backgroundColor="0x888888" dataField="blank2" headerText=""/>
<mx:DataGridColumn headerText="Previous Month End" dataField="PrevMonthEndDate" headerWordWrap="true" textAlign="center" itemRenderer="PME5"/>
<mx:DataGridColumn headerText="Previous Month End Price" dataField="PrevMonthEndPrice" headerWordWrap="true" textAlign="right" labelFunction="formatUtil1" itemRenderer="PME5"/>
<mx:DataGridColumn headerText="% Difference" dataField="PrevMonthEndDelta" headerWordWrap="true" textAlign="right" labelFunction="formatUtil2" itemRenderer="PME5"/>
<mx:DataGridColumn headerText="Source" dataField="PrevMonthEndSource" headerWordWrap="true" 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);
接下来是 PD5 的 .as 文件 -
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);
【问题讨论】:
取出labelFunctions,看看你是否编译我感觉未定义的引用在那些函数中。 @The_asMan - 刚刚做了,不是labelFunction
s。此外,它们在故障线下方的两行中工作。
是的,我没有看到后面的那些。这很奇怪。我唯一看到的是使用 labelfunc formatUtil 和 formatUtil2 工作的线路上的渲染器将渲染器从 PD5 更改为 PME5,看看会发生什么
@The_asMan - 从每一行中删除 itemRenderer="PD5"
也无济于事。
你能把 PME5、PD5、formatUtil1 和 formatUtil2 贴出来吗
【参考方案1】:
由于到目前为止还没有解决我的问题,我决定完全回避它并将有问题的程序移植到 C#。到目前为止一切都运行良好。
懒惰的回答?是的。 懒惰的解决方案?不幸的是没有。
【讨论】:
【参考方案2】:在调试模式下运行应用程序。当出现错误时,Flex builder(Flash Builder 4.5 是最新版本)将中断并带您到导致问题的代码行。发生这种情况是因为您尝试访问的某些对象的属性实际上为空。
您可以在调试窗口(窗口菜单>调试)中上下浏览调用树,这样您就可以找出哪个对象为空。
这主要是因为数据提供者不完整,即缺少一些数据。例如,一行可能没有前一天的营业价格。如果是这种情况,那么您需要在 formatUtil 函数中处理 null 项
var field:Object=item[column.dataField];
if(field!=null)
return format1.format(field);
else
return "";
编辑: 还要检查这两行:
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
【讨论】:
我更改了我的formatUtil
函数但没有任何效果,正如我已经多次介绍的那样,我可以从两个问题行中删除 itemRenderer
调用,但没有任何效果。
您是否在调试模式下运行?应用程序崩溃的原因是什么?
我做到了,错误与我在问题中发布的对话框相匹配。除了把我带到有问题的线路之外,它并没有给我任何新的东西。列表中我的主 .mxml 文件没有任何错误。
...所有这些。我认为我们正在经历沟通失败;这些错误消息都与我编写的代码行不对应,因为它们都指向 SDK 中的类。
只需检查 PreviousDatePrice 和 PreviousDateDelta 不为空。如果他们是你可能想在你的班级中为他们输入一个默认值【参考方案3】:
这里编译得很好。没有改变任何东西,只是添加了默认数据。
<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" 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" textAlign="left"/>
<mx:DataGridColumn headerText="Description" dataField="FullName" headerWordWrap="true" textAlign="left"/>
<mx:DataGridColumn headerText="Trans" dataField="TransactionCode" headerWordWrap="true" textAlign="center"/>
<mx:DataGridColumn headerText="Quantity" dataField="Quantity" headerWordWrap="true" textAlign="right" labelFunction="formatUtil3"/>
<mx:DataGridColumn headerText="Execution Date" dataField="ExecutionDate" headerWordWrap="true" textAlign="center"/>
<mx:DataGridColumn headerText="Execution Price" dataField="ExecutionPrice" headerWordWrap="true" textAlign="right" labelFunction="formatUtil1"/>
<mx:DataGridColumn backgroundColor="0x888888" dataField="blank1" headerText=""/>
<mx:DataGridColumn headerText="Previous Business Day" dataField="PreviousDate" headerWordWrap="true" textAlign="center" itemRenderer="tmp.PD5"/>
<mx:DataGridColumn headerText="Previous Business Day Price" dataField="PreviousDatePrice" headerWordWrap="true" textAlign="right" labelFunction="formatUtil1" itemRenderer="tmp.PD5"/>
<mx:DataGridColumn headerText="% Difference" dataField="PreviousDateDelta" headerWordWrap="true" textAlign="right" labelFunction="formatUtil2" itemRenderer="tmp.PD5"/>
<mx:DataGridColumn headerText="Source" dataField="PreviousDateSource" headerWordWrap="true" textAlign="left" itemRenderer="tmp.PD5"/>
<mx:DataGridColumn backgroundColor="0x888888" dataField="blank2" headerText=""/>
<mx:DataGridColumn headerText="Previous Month End" dataField="PrevMonthEndDate" headerWordWrap="true" textAlign="center" itemRenderer="tmp.PME5"/>
<mx:DataGridColumn headerText="Previous Month End Price" dataField="PrevMonthEndPrice" headerWordWrap="true" textAlign="right" labelFunction="formatUtil1" itemRenderer="tmp.PME5"/>
<mx:DataGridColumn headerText="% Difference" dataField="PrevMonthEndDelta" headerWordWrap="true" textAlign="right" labelFunction="formatUtil2" itemRenderer="tmp.PME5"/>
<mx:DataGridColumn headerText="Source" dataField="PrevMonthEndSource" headerWordWrap="true" textAlign="left" itemRenderer="tmp.PME5"/>
</mx:columns>
</mx:DataGrid>
</s:Application>
【讨论】:
【参考方案4】:代码中没有什么是不好的。 显然,这是未经测试的代码。 我感觉您的数据提供者不完整或缺少数据。 可能是由于其中 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);
【讨论】:
我确实需要在这些功能中进行某种验证,但用户必须手动启动应用程序的任何类型的操作。此错误发生在应用程序实际打开之前,并且在用户点击“开始”按钮之前,有问题的DataGridColumn
s 中没有任何内容可显示。
啊,那么它的渲染器数据 == null 在第一次运行时,因此 data.PrevMonthEndDelta 将不存在。编辑我的帖子
我认为这不是问题所在,因为它没有解释为什么那些相同的渲染器仍然可以在其他行上正常工作。
我不知道,但我知道在渲染器上的第一次运行总是为空的我之前遇到过这个就像我发布的那样给它一个空测试
添加了空检查,还是有问题。以上是关于我的错误 #1010 情况的主要内容,如果未能解决你的问题,请参考以下文章