jasperReport文件中发生错误

首先,我在iReport 5.1.0中制作了一个R_D1.jrxml文件。

我执行报告的Java代码如下所示:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.HashMap;

import net.sf.jasperreports.engine.JRException;

import net.sf.jasperreports.engine.JasperFillManager;

public class DbReportFill{

Connection con;

public void generateReport() {

try {

Class.forName("com.mysql.jdbc.Driver");

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sentiment","root", "abcd");

System.out.println("Filling report...");

JasperFillManager.fillReportToFile("/home/abcd/report/R_D1.jrxml",new HashMap<String, Object> (), con);

System.out.println("Done!");

con.close();

} catch (JRException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

new DbReportFill().generateReport();

}

}

当我执行该类时,出现以下异常:

Filling report...

net.sf.jasperreports.engine.JRException: Error loading object from file : /home/abcd/report/R_D1.jrxml

at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:127)

at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:99)

at net.sf.jasperreports.engine.JasperFillManager.fillToFile(JasperFillManager.java:117)

at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:666)

at DbReportFill.generateReport(DbReportFill.java:24)

at DbReportFill.main(DbReportFill.java:56)

Caused by: java.io.StreamCorruptedException: invalid stream header: 3C3F786D

at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:802)

at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)

at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.<init>(ContextClassLoaderObjectInputStream.java:58)

at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:122)

... 5 more

我不确定自己在做什么错,或者这个异常意味着什么。

回答:

这里的主要问题是您尚未编译文件。将JRXML文件视为Java源文件。要运行Java文件,您必须先对其进行编译,然后才能运行。jrxml文件只是人类可读的XML文件,它描述了您想要发生的事情。

要编译文件,请执行以下操作:

JasperCompileManager.compileReport("/home/abcd/report/R_D1.jrxml");

这将返回您和的实例JasperReport,该实例是已编译的文件。(通常将其写到.jasper文件中,因此您不必在每次运行时都编译报告,但这超出了此问题的范围)。一旦有了这个,就可以填写报告。

另外,不相关但值得一提的是,您应该在finally块中关闭数据库连接。与您当前的示例一样,它永远不会关闭,因为会引发异常。final块将确保即使在发生异常的情况下也将其关闭。

您的示例方法应如下所示:

public void generateReport() {

Connection con

try {

Class.forName("com.mysql.jdbc.Driver");

con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sentiment","root", "abcd");

System.out.println("Compiling report...");

JasperReport jasperReport = JasperCompileManager.compileReport("/home/abcd/report/R_D1.jrxml");

System.out.println("Filling report...");

JasperFillManager.fillReportToFile(jasperReport,new HashMap<String, Object> (), con);

System.out.println("Done!");

} catch (JRException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

} finally {

if (con != null){

con.close();

}

}

}

希望能有所帮助。祝好运。

以上是 jasperReport文件中发生错误 的全部内容, 来源链接: utcz.com/qa/413349.html

回到顶部