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



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

JasperDesign jasperDesign = JasperManager.loadXmlDesign(new File(".").getCanonicalPath()+ "\report\report2.jrxml");
报告

2是我的主要报告。

这是我的子报表表达式:

$P{SUBREPORT_DIR} + "subreport1.jasper"

有什么解决方案吗?

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

爪哇代码

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",将"子报表表达式"设置为创建的包含已编译子报表的参数。

这样,你只需要把你的jrxmls放在你的类路径中,然后就可以了。

最新更新