Механизм Jasperreports JRRuntimeException в отчете (). Показать

Я создаю приложение Java, используя DynamicReports и JasperReports.

При попытке показать JasperReportBuilder я получаю эту ошибку:

...
    DEBUG DefaultExtensionsRegistry - Instantiating extensions registry for system.f
    ont.families using factory class net.sf.dynamicreports.jasper.base.JasperSystemF
    ontExtensionsRegistryFactory
    Exception in thread "AWT-EventQueue-0" Exception in thread "AWT-EventQueue-0"
    Exception: net.sf.jasperreports.engine.JRRuntimeException thrown from the UncaughtExceptionHandler in thread "AWT-EventQueue-0"

Я действительно в нехватке идей здесь. Я использую мост JDBC-ODBC для получения базы данных Access (запрос работает). Мой фрагмент кода (в основном создание отчета и столбцов динамически):

JasperReportBuilder report = report();
            try{
                report.setTemplate(Templates.reportTemplate);
                StyleBuilder titleStyle = stl.style(boldCenteredStyle)
                        .setVerticalAlignment(VerticalAlignment.MIDDLE)
                        .setFontSize(15);

                report.title(cmp.horizontalList().add(cmp.image("resources/icon.jpg").setFixedDimension(80, 80)
                    , cmp.text("Gestion de rapports").setStyle(titleStyle)
                    , cmp.text(rapportSelect.getNomListe()).setStyle(titleStyle).setHorizontalAlignment(HorizontalAlignment.RIGHT))
                        .newRow().add(cmp.filler().setStyle(stl.style().setTopBorder(stl.pen2Point())).setFixedHeight(10)));

                Iterator it = rapportSelect.getMappingColonnes().entrySet().iterator();
                while (it.hasNext()) {
                    Map.Entry pair = (Map.Entry)it.next();
                    report.columns(col.column((String)pair.getKey(), (String)pair.getValue(), type.stringType()));
                }

                report.pageFooter(Templates.footerComponent);

                String sqlQuery = rapportSelect.getSqlQuery() + " ";

                Statement stmt = GestionDbAdapter.getInstance().get().createStatement();
                ResultSet rs = stmt.executeQuery(sqlQuery);
                report.setDataSource(rs);

                report.show(false);

Все приложение очень большое, поэтому я поместил только кусок своего кода (который я немного подчистил для stackoverflow). Пожалуйста, сообщите мне, если вы хотите больше кода.


person pathat0r    schedule 25.05.2016    source источник
comment
Вы развертываете все зависимости в одном JAR-файле? Я боюсь, что jasperreports_extension.properties находится более чем в 1 JAR в одном и том же месте, и если вы объедините все эти JAR в 1 JAR, этот файл свойств будет перезаписан. Это означает, что некоторые свойства отсутствуют. См.: dynamicreports.org/forum/viewtopic.php?f=1&t=1388< /а>   -  person PAX    schedule 10.09.2016


Ответы (1)


Я предполагаю, что у вас такая же проблема, как и у меня. У меня есть 2 типа развертывания (без веб-сценария):

  1. Развертывание приложения со всеми зависимыми JAR-файлами в отдельных файлах
  2. Автономное развертывание со всеми JAR-файлами, упакованными в один JAR-файл («jar-with-dependencies»).

Второй сценарий не выполняется должным образом и прерывается с той же ошибкой в ​​том же месте, что вы описали.

Причина заключалась в том, что несколько зависимых JAR-файлов JasperReport содержат файл свойств с тем же именем в одном и том же месте на уровне пакета по умолчанию: jasperreports_extension.properties

В автономном сценарии JAR они перезаписывают друг друга. Наконец, есть только один jasperreports_extension.properties, поэтому для работающего JasperReport отсутствуют некоторые пары ключ-значение.

Обходной путь:

Соберите все файлы jasperreports_extension.properties и объедините их содержимое в один файл jasperreports_extension.properties. Убедитесь, что ваше развертывание получает этот специальный файл вместо исходных. Я обнаружил дубликаты файлов jasperreports_extension.properties в следующих зависимых артефактах:

  • jasperreports-6.2.2.jar
  • jasperreports-шрифты-6.0.0.jar
  • динамические отчеты-ядро-4.1.1.jar
  • динамические отчеты-googlecharts-4.1.1.jar
person PAX    schedule 11.09.2016
comment
Это сработало для меня. В моем проекте, где я использую сервер в качестве библиотеки, я объединил свойства Jasper со своими свойствами, а затем в своем проекте (не в Интернете), где я использовал свою библиотеку, я создал банку с зависимостями, и она отлично работала. - person MathOliveira; 22.11.2018