有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在fat jar中找不到java JasperReport文件错误

我制作了一个包含JasperReport的胖罐子,但当我尝试执行罐子时,这个弹出窗口出现在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);
}}

共 (1) 个答案

  1. # 1 楼答案

    一旦将资源打包到jar中,它们就不能作为File访问。从InputStream而不是文件加载报告:

    JasperReport jasperReport = JasperCompileManager.compileReport(getClass().getResourceAsStream("/fxml/Report.jrxml"));
    

    至于参数:如果用于解析报告文件中的资源,请尝试使用资源路径。JasperReports应该能够通过ClassLoader访问资源