У меня приложение с джавой, где одна из функций генерирует представление PDF объектов Java. Недавно я сменил проект JDK на 24, а Джаспер на 7.0.3. С тех пор, когда я пытаюсь заполнить отчет, когда приложение работает от Intellij, все в порядке, но когда я запускаю банок или упаковываю его, я получаю: < /p>
net.sf.jasperreports.engine.JRException: Unable to load report
at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:173)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:150)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:121)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:108)
at SabaJasperPrinter.printDoc(SabaJasperPrinter.java:86)
at PrintoutDialog.lambda$print$0(PrintoutDialog.java:268)
at java.base/java.lang.Thread.run(Thread.java:1447)
< /code>
Я пробовал каждое решение и метод устранения неполадок, которые я знаю и нашел в сети. Ничего не помогает. Я проверил зависимости. Я пытался использовать файлы Jasper вместо jrxml, избегая необходимости использовать: «Jasperdesign jasperdesign = jrxmloader.load (input);» Я обновил версию Jaspersoft Studio в 7.0.3 и преобразовал файлы JRXML в 7.0.3. Ничего не работает! < /P>
File input = new File(Saba.RESOURCE_PATH + jrxmlPath+".jrxml");
JasperDesign jasperDesign = JRXmlLoader.load(input);
JRPropertiesUtil.getInstance(DefaultJasperReportsContext.getInstance())
.setProperty("net.sf.jasperreports.default.font.name", "Calibri");
JRPropertiesUtil.getInstance(DefaultJasperReportsContext.getInstance())
.setProperty("net.sf.jasperreports.default.pdf.font.name", "Calibri");
JasperReport report = JasperCompileManager.compileReport(jasperDesign);
JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, dataSource);
//JasperViewer.viewReport(jasperPrint);
if (jasperPrint != null) {
if(printout.isCreateAndOpen()){
f = File.createTempFile(filePrefix+"_", "."+printout.getDefaultFileTypeOnlyExtension());
switch (printout.getDefaultFileTypeOnlyExtension()){
case "pdf" -> JasperExportManager.exportReportToPdfFile(jasperPrint, f.getAbsolutePath());
case "html" -> JasperExportManager.exportReportToHtmlFile(jasperPrint, f.getAbsolutePath());
case "xlsx" -> {
File xlsxFile = new File(f.getAbsolutePath());
JRXlsxExporter exporter = new JRXlsxExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(xlsxFile));
SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
configuration.setOnePagePerSheet(false);
configuration.setDetectCellType(true);
configuration.setWhitePageBackground(true);
exporter.setConfiguration(configuration);
exporter.exportReport();
}
case "docx" -> {
File docxFile = new File(f.getAbsolutePath());
JRDocxExporter exporter = new JRDocxExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(docxFile));
SimpleDocxReportConfiguration configuration = new SimpleDocxReportConfiguration();
configuration.setFlexibleRowHeight(true);
exporter.setConfiguration(configuration);
exporter.exportReport();
}
default -> JasperExportManager.exportReportToPdfFile(jasperPrint, f.getAbsolutePath());
}
Desktop.getDesktop().open(f);
readyFilePath = f.getAbsolutePath();
}else{
readyFilePath = print(jasperPrint, false);
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... oad-report