Ошибка файла JasperReport в толстом фляге - PullRequest
0 голосов
/ 02 февраля 2020

Я сделал толстую банку, которая содержит 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 голос
/ 02 февраля 2020

Ресурсы недоступны как File после того, как вы упакуете их в банку. Загрузите отчет из InputStream вместо файла вместо:

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

Что касается параметра: попробуйте использовать пути к ресурсам, если он используется для разрешения ресурсов в файле отчета. JasperReports должен иметь возможность доступа к ресурсам через ClassLoader.

...