无法从位置加载对象,错误子报告jasper

时间:2013-12-20 02:55:06

标签: java jasper-reports

我有一个主报告和子报告,当我在计算机上运行它时,它运行正常。但是,当我将应用程序运行并在另一台计算机上运行时,它无效并显示错误“无法从位置加载对象”。我已将主报告和子报告放在同一文件夹中,但它不起作用。该错误告诉子报告始终读取旧目录。 这是我的代码:

JasperDesign jasperDesign = JasperManager.loadXmlDesign(new File(".").getCanonicalPath()+ "\\report\\report2.jrxml");
报告2是我的主要报告。

这是我的子报告表达式:

$P{SUBREPORT_DIR} + "subreport1.jasper"

有什么解决方案吗?

1 个答案:

答案 0 :(得分:2)

我建议您不要将jrxml路径指定为子报表表达式,而只需在运行时从类路径编译子报表,然后将编译后的子报表作为参数传递给报表。然后将该参数用作子报表表达式

Java代码

JasperReport jasperReport = null;
String reportName = "MySubreport.jrxml";

//load the the subreport jrxml from the classpath
InputStream ins =  this.getClass().getClassLoader().getResourceAsStream(reportName);
JasperDesign design = JRXmlLoader.load(ins);

try {
    jasperReport = JasperCompileManager.compileReport(design);
} catch (JRException e) {
    e.printStackTrace();
}

//pass the jasperReport object as a parameter to the report
Map<String, Object> reportParams = new HashMap<String, Object>();
reportParams.put("SUB_JASPER", jasperReport);

//finally pass the parameter map to the report.

<强> JRXML

  1. 创建一个报告参数,参数类设置为net.sf.jasperreports.engine.JasperReport
  2. 单击子报表,将表达式类属性设置为net.sf.jasperreports.engine.JasperReport,将子报表表达式设置为您创建的包含已编译子报表的参数。
  3. 这样,你只需要将你的jrxmls放在你的类路径中然后你就可以了。