我试图在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)
答案 0 :(得分:1)
Long.getLong
使用给定名称获取系统属性,并将其解析为Long
。我非常怀疑这是你想要的行为。
您可能需要Long.parseLong
或Long.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内部代码来进行更改。 转换日期时问题不是。它在其他地方