Получил java.lang.NoClassDefFoundError: org / apache / commons / logging / LogFactory` в коде с использованием API JasperReports - PullRequest
3 голосов
/ 25 октября 2011

Я работаю над простым автономным настольным приложением, которое будет генерировать отчет на основе значений, переданных программе. Там нет использования базы данных. Я разработал свой отчет JasperReports с помощью дизайнера iReport и добавил параметр ID_NO и текстовое поле с выражением $P{ID_NO}

Я могу успешно просмотреть отчет и посмотреть, что я ожидал. Но я не могу сгенерировать отчет из Java-приложения и передать оттуда параметр ID_NO. Вот мой код:

public class MyReportViewer extends JFrame {

    public MyReportViewer(String fileName) {
        this(fileName,null);
    }

    public MyReportViewer(String fileName,HashMap<String, Object> parameter) {
        super("View Report");
        try {
            JasperPrint print = JasperFillManager.fillReport(fileName, parameter);
            JRViewer viewer = new JRViewer(print);

            Container c = getContentPane();
            c.add(viewer);
        } catch(Exception e) {
            e.printStackTrace();
        }

        setBounds(10, 10, 600,500);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }

    public static void main(String args[]) {
        HashMap<String, Object> param = new HashMap<String, Object>();
        param.put("ID_NO", "101-15-980");
        MyReportViewer viewer = new MyReportViewer("test.jasper", param);
        viewer.setVisible(true);
    }
}

Код дает исключение

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at net.sf.jasperreports.engine.util.JRLoader.<clinit>(JRLoader.java:61)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:267)
    at jspertest.MyReportViewer.<init>(MyReportViewer.java:37)
    at jspertest.MyReportViewer.main(MyReportViewer.java:60)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)

и не запускается.

Пожалуйста, дайте мне подсказку. Я никогда раньше не использовал JasperReports или какой-либо другой генератор отчетов.

Edit:

Добавлены все файлы библиотеки из jasperreports4.x.x / lib / .. в проект. Теперь исключение прошло. Теперь консоль говорит -

log4j:WARN No appenders could be found for logger (net.sf.jasperreports.extensions.ExtensionsEnvironment).
log4j:WARN Please initialize the log4j system properly.

и небольшое всплывающее окно говорит, что в документе нет страниц. Появится небольшое окно без отчета.

Ответы [ 3 ]

3 голосов
/ 25 октября 2011

Ваше исключение не связано с проблемой параметров, которая, по-видимому, выглядит хорошо.

Похоже, вам не хватает Apache Commons Logging в вашем пути к классам.Он работает в режиме предварительного просмотра, поскольку в вашей среде IDE указан правильный путь к классу.

1 голос
/ 26 сентября 2012

Да, все верно. "The document has no pages" означает, что в источнике данных нет записей, поэтому отчет не создается.

0 голосов
/ 12 июня 2013

Вы можете установить свойство, в котором отчет будет по-прежнему отображать пустые страницы, даже если данные отсутствуют в отчете.

Когда свойство NO Data позволит вам выбрать разные значения и другой способ отображения отчета в случае, если набор данных возвращает ноль строк или в отчете нет данных для печати. ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...