我制作了一个包含JasperReport的胖jar,但是当我尝试执行jar时,此弹出窗口已显示在cmd中
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: file:\C:\Users\User\Desktop\test.jar!\fxml\Report.jrxml (The filename, directory name, or volume label syntax is incorrect)
“!我认为这是问题所在,但我不知道为什么将其添加到路径中,也无法删除。
这是我的代码:
public class PrintReport extends JFrame {
public void showReport(Connection conn) throws JRException {
String reportSrcFile = getClass().getResource("/fxml/Report.jrxml").getFile();
String reportsDir = getClass().getResource("/fxml/").getFile();
JasperReport jasperReport = JasperCompileManager.compileReport(reportSrcFile);
// Fields for resources path
HashMap<String, Object> parameters = new HashMap<String, Object>();
parameters.put("reportsDirPath", reportsDir);
ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
list.add(parameters);
JasperPrint print = JasperFillManager.fillReport(jasperReport, parameters, conn);
JRViewer viewer = new JRViewer(print);
viewer.setOpaque(true);
viewer.setVisible(true);
this.add(viewer);
this.setSize(1000, 500);
this.setVisible(true);
}}
将资源打包到罐中后,就无法将其作为File
进行访问。从InputStream
而不是文件加载报告:
JasperReport jasperReport = JasperCompileManager.compileReport(getClass().getResourceAsStream("/fxml/Report.jrxml"));
关于参数:如果用于解析报告文件中的资源,请尝试使用资源路径。 JasperReports应该能够通过ClassLoader
访问资源。