Jasper reports 如何避免错误 ;填充时 ;打印和#xA0;错误 ;评估 ;表情?

Jasper reports 如何避免错误 ;填充时 ;打印和#xA0;错误 ;评估 ;表情?,jasper-reports,Jasper Reports,目前,我在JasperReport服务器和iReport工作。JasperReport 5.5.0和iReport的版本是5.5.0。数据库是MYSQL 我声明了变量Dr,如下所示,am\u primeamt来自SQL查询 <variable name="Dr" class="java.lang.Double"> <variableExpression><![CDATA[($F{am_primeamt} > 0 ? $F{am_primeamt} :

目前,我在JasperReport服务器和iReport工作。JasperReport 5.5.0和iReport的版本是5.5.0。数据库是MYSQL

我声明了变量Dr,如下所示,
am\u primeamt
来自SQL查询

<variable name="Dr" class="java.lang.Double">
    <variableExpression><![CDATA[($F{am_primeamt} > 0 ? $F{am_primeamt} : 0 )]]></variableExpression>
</variable>

0 ? $F{am_primeamt}:0)]]>
并试图表现如下:

<textField pattern="#,##0.00">
<reportElement x="427" y="0" width="82" height="20" uuid="332ceda3-5237-40b5-a0ef-3aad009a7911">
    <printWhenExpression><![CDATA[$V{Dr} != 0]]></printWhenExpression>
</reportElement>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$V{Dr}]]></textFieldExpression>

当我试图查看预览时,它显示以下错误:

填充打印时出错…计算表达式时出错:源文本:$V{Dr}= 0 net.sf.jasperreports.engine.fill.jrepressionevalexception:计算表达式时出错:源文本:$V{Dr}=0位于net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:244)处net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:591)处net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:559)net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:1016)net.sf.jasperreports.engine.fill.JRFillElement.evaluatePrintWhenExpression(JRFillElement.java:795)net.sf.jasperreports.engine.fill.JRFillTextField.evaluate(JRFillTextField.java:482)net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:259)net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:456)net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(jrvticalfiller.java:2057)net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:778)net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:288)net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:151)net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:932)net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845)net.sf.jasperreports.engine.fill.JRFiller(JRFiller.java:87)net.sf.jasperrepertreports.engine.JasperFillManager.fill(JasperFillManager.java:446)net.sf.jasperreports.engine.jasperreports.fill(JasperFillManager.java:276)net.sf.jasperreports.engine.jasperrepillmanager.fillReport(JasperFillManager.java:745)com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:891)在org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)在org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)由以下原因引起:java.lang.ClassCastException:java.math.BigDecimal无法在gl_事务_1454989470091439976.evaluate转换为java.lang.Double(gl_transaction_1454989470091_439976:363)位于net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:231)…20多个 打印未填充。请尝试使用空数据源

编辑: 语言从一开始就被设置为java,这显示了这样的错误。在使其成为groovy之后,它解决了我的问题。

公认的答案没有解决这个问题,因为它被删除的用户升级了(问问你自己为什么)即使问题不完整,我也决定回答,以帮助未来的观众理解问题。版主已删除已接受的答案,但问题仍然存在,并指出了设置语言
groovy

问题是:

java.lang.ClassCastException:java.math.BigDecimal无法转换为 java.lang.Double

这很可能是由于字段
$F{am_primeamt}
被定义为
java.math.BigDecimal

<field name="am_primeamt" class="java.math.BigDecimal">
    <fieldDescription><![CDATA[]]></fieldDescription>
</field>
groovy为什么工作?它使用java.lang.Number进行自动转换,并使用运算符重载来允许对BigDecimal对象进行直接的数学运算。请参见,但是在选择它而不是java之前,最好理解为什么………

接受的答案不能解决问题,因为它使用的是已删除的rs(问自己为什么)即使问题不完整,我也决定回答,以帮助未来的观众理解问题。版主已删除已接受的答案,但问题仍然存在,并指出了设置语言
groovy

问题是:

java.lang.ClassCastException:java.math.BigDecimal无法转换为 java.lang.Double

这很可能是由于字段
$F{am_primeamt}
被定义为
java.math.BigDecimal

<field name="am_primeamt" class="java.math.BigDecimal">
    <fieldDescription><![CDATA[]]></fieldDescription>
</field>

groovy为什么工作?它使用java.lang.Number进行自动转换,并使用运算符重载允许对BigDecimal对象进行直接的数学运算,请参见,但是在选择它而不是java之前,最好理解为什么……

@PetterFriberg那篇文章与我的问题相反,因为它在使用Groove后解决了问题y、 嗯,您的错误是java.math.BigDecimal无法转换为java.lang.Double,您的解决方案正在更改为groovy?,好吧……,请添加$F{am_primeamt}的jrxml来创建一个完整的,因为您可能有class=“java.math.BigDecimal”在它里面…@PetterFriberg那篇文章做的与我的问题相反,因为它在使它成为groovy之后解决了。嗯,你的错误是java.math.BigDecimal不能转换为java.lang.Double,而你的解决方案正在改为groovy?,好吧…,请添加$F{am_primeamt}的jrxml来创建一个完整的,因为你可能有class=“java.math.BigDecimal”在里面。。。
<variable name="Dr" class="java.lang.Double">
   <variableExpression><![CDATA[($F{am_primeamt}.doubleValue() > 0 ? $F{am_primeamt}.doubleValue() : 0d )]]></variableExpression>
</variable>