0

我正在尝试将 jasper 报告中的字符串值转换为 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)
4

3 回答 3

1

Long.getLong获取具有给定名称的系统属性,并将其解析为Long. 我非常怀疑那是你想要的行为。

你可能想要Long.parseLongLong.valueOf。但是,请注意,这些都非常严格 - 如果您的字符串中有空格或类似的东西,您需要先修剪它。

如果这仍然不起作用,我建议您添加一个诊断日志$F{field}准确显示它首先尝试解析的内容。

编辑:无论如何,我不希望ClassCastException您给出的代码中有 a 。我怀疑在它尝试解析值之前出现了其他问题 - 但是当你克服了这个问题后,无论如何你都需要从 更改Long.getLong为。Long.parseLong

于 2013-08-12T06:34:43.983 回答
0

好的。解决了。必须查看 jasper 内部代码才能进行更改。转换日期时没有问题。在别的地方

于 2013-08-12T07:06:00.003 回答
0

您必须使用 Long.parseLong() 而不是 getLong() 方法,因为从 String 解析到 Long 值是 parseLong() 方法所做的。

检查此 Javadoc 以获取完整参考 http://docs.oracle.com/javase/6/docs/api/java/lang/Long.html

于 2013-08-12T06:30:46.990 回答