我正在尝试将 jasper 报告中的 String 值转换为 long 并将其转换为 Date 对象。但我总是最终得到从 String 到 Long 的类转换异常。
java.lang.String cannot be cast to java.lang.Number
我正在尝试以下代码
<variable name="date" class="java.util.Date">
<variableExpression><![CDATA[new Date(Long.getLong($F{field}))]]></variableExpression>
</variable>
Long.getLong(String s) 在 Java 中给出所需的输出。但是当我们使用相同的java表达式时,它会在jasper中给出异常。 jasper 对待原始 java 类型的方式不同吗?
编辑:完整的堆栈跟踪
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
at net.sf.jasperreports.charts.fill.JRFillTimeSeries.evaluate(JRFillTimeSeries.java:147)
at net.sf.jasperreports.charts.fill.JRFillTimeSeriesDataset.customEvaluate(JRFillTimeSeriesDataset.java:104)
at net.sf.jasperreports.engine.fill.JRFillElementDataset.evaluate(JRFillElementDataset.java:155)
at net.sf.jasperreports.engine.fill.JRCalculator.calculateVariables(JRCalculator.java:160)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:765)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:288)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:151)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:932)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:864)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:88)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:569)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:915)
at NwLogCollector.main(MyExp.java:682)
最佳答案
Long.getLong
获取具有给定名称的系统属性,并将其解析为 Long
。我非常怀疑这是否是您想要的行为。
您可能想要 Long.parseLong
或 Long.valueOf
。但是,请注意,这些都非常严格 - 如果您的字符串中有空格或类似的内容,您需要先修剪它。
如果仍然不起作用,我建议您添加 $F{field}
的诊断日志准确地显示它首先尝试解析的内容。
编辑:我没想到 ClassCastException
无论如何,在你给出的代码中。我怀疑在尝试解析该值之前出现了其他问题 - 但是当您已经克服了这个问题时,您需要从 Long.getLong
进行更改至Long.parseLong
无论如何。
关于java - 在 Jasper 报告中将 String 转换为 Long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18180743/