java - Fat jar 中 JasperReport 文件未找到错误

标签 java swing report

我制作了一个包含 JasperReport 的 fat 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);
}}

最佳答案

一旦将资源打包到 jar 中,就无法将其作为文件进行访问。从 InputStream 而不是文件加载报告:

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

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

关于java - Fat jar 中 JasperReport 文件未找到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60021886/

相关文章:

java - 在Java中制作对数螺旋

java - 如何在抛出 BeanCreationException 后关闭应用程序

java - 如何根据JPanel的大小设置JTextPane的大小?

python - 如何基于Python生成不同格式(HTML、文本等)的报告?

Elasticsearch SQL 类子查询聚合

java - 使用 Java 到架构的映射对象作为 Freemarker 数据模型

java - Spring Security permitAll 不允许匿名访问

Java Swings 跨选项卡共享 JTextField 值

java - 什么 Java JPanel 布局允许中心、侧面和角元素?

php - 强制表格显示 5 行(有或没有数据)