朋友们,我创建了一个java项目,并在该项目中使用了jasper报告来生成报告,当我将java项目打包到.exe安装程序时,jasper报告工作正常,但是当我在另一个系统中部署该exe安装程序时jasper报告不起作用即:jasper报告在我的系统中调用而不是在另一个系统中调用,我知道我必须更改我的文件路径但我不知道如何提供所有系统中接受的文件路径jasper报告也将在另一个系统中正常工作。
我的代码是:
try( InputStream is = getClass().getResourceAsStream("C:\\Users\\Applebj\\Documents\\NetBeansProjects\\JavaApplication14\\src\\resources\\bil.jrxml")){
String txt = jLabel1.getText();
String t1=lb2.getText();
String t2=lbl3.getText();
Connection cn;
Class.forName("com.mysql.jdbc.Driver");
cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/billing", "root", "");
Map <String,Object> mp =new HashMap <String,Object>();
mp.put("bj", txt);
mp.put("hpy",t1);
mp.put("li",t2);
// URL urpo=getClass().getResource("/resources/bil.jrxml");
JasperReport jasperReport;
jasperReport = JasperCompileManager.compileReport(is);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,mp, cn);
// JasperExportManager.exportReportToPdfFile(jasperPrint, "C:\\Users\\Applebj\\Desktop\\rep\\simple_report.pdf");
JasperExportManager.exportReportToPdfFile(jasperPrint, "bil.pdf");
JasperViewer.viewReport(jasperPrint);
}
catch(Exception eey){
eey.printStackTrace();
System.out.println(eey.getMessage());
}
请帮助我解决此问题,感谢adavance
答案 0 :(得分:1)
根据您构建应用程序的方式,您需要确保.jrxml
文件包含在生成的.jar文件中。
在Netbeans和Eclipse中,您应该能够将.jrxml
文件放到src
目录中,并且它应该作为构建过程的一部分捆绑在一起。
这意味着您将无法再将.jrxml
作为文件引用,而是需要将其视为嵌入式资源......
try (InputStream is = getClass().getResourceAsStream("/path/to/report/relative/to/the/src/directory/bil.jrxml")) {
JasperReport jasperReport = JasperCompileManager.compileReport(is);
}
(Nb仍有可能JasperCompileManager
将抛出您需要处理的异常,但至少InputStream
将被正确关闭)
这意味着,如果您将bil.jrxml
报告放在src/resources
目录中(例如),则需要使用路径/resources/bil.jrxml
现在,我不鼓励您在运行时编译.jrxml
文件,因为它不是一个简短的过程,如果不是更长的话,报告过程可能已经花费几秒钟,因此您不希望保留您的用户等待,相反,预编译它们并使用生成的.jasper
文件,您可以在运行时加载...