在Jasper报告中将String转换为Long

时间:2013-08-12 06:27:44

标签: java jasper-reports

我试图在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)

3 个答案:

答案 0 :(得分:1)

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

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

如果仍然无法解决问题,建议您添加一个$F{field}的诊断日志,以显示完全它首先尝试解析的内容。

编辑:我不希望你提供的代码中有ClassCastException。我怀疑在尝试解析值之前出现了其他问题 - 但是当已经超过了该值时,无论如何都需要从Long.getLong更改为Long.parseLong

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

确定。解决了。不得不查看jasper内部代码来进行更改。 转换日期时问题不是。它在其他地方

相关问题