java - 在 Jasper 报告中将 String 转换为 Long

标签 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)

最佳答案

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/

相关文章:

java - 更改 BufferedImage 的内容,然后更新 JFrame 以反射(reflect)它

java - Nashorn 的 IllegalArgumentException 异常 - 它是 Java 8 中的错误吗?

java - 搜索二维数组中是否存在一行,其总和等于同一二维数组中其他两行的总和

java - 使用java从wav文件中提取人声

java - 计算时间和日期差

jasper-reports - 如何向图表添加图例(X 轴和 Y 轴)

java - 访问传递给 jasper 记录的唯一 Java bean

java - 使用 java ireport : net. sf.jasperreports.engine.JRException 生成报告时出错:编译报告 java 源文件时出错

excel - Dynamicjasper Excel 和领先的撇号

java - 如何避免本例中的 "Recompile with -xLint:unchecked"