#java #jasper-reports #noclassdeffounderror
#java #джаспер-отчеты #ошибка noclassdeffounderror
Вопрос:
Я работаю над простым автономным настольным приложением, которое будет генерировать отчет на основе значений, переданных программе. База данных не используется. Я разработал свой отчет JasperReports с помощью iReport designer и добавил параметр 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 или какой-либо генератор отчетов.
Редактировать:
Добавлены все файлы библиотеки из 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.
и небольшое всплывающее окно сообщает, что в документе нет страниц. Появляется небольшое окно без отчета.
Комментарии:
1. И что происходит, когда вы запускаете этот код? Компилируется ли он? Выдает ли он исключение? Если да, то какова трассировка стека? Вы видите что-то в кадре? Что?
2. Извините за неполный вопрос. Последние несколько строк отсутствуют, отредактированные, которые вы должны увидеть через некоторое время
Ответ №1:
Ваше исключение не связано с проблемой параметров, которая, по-видимому, выглядит хорошо.
Похоже, вам не хватает входа в Apache Commons в вашем пути к классу. Он запускается в режиме предварительного просмотра, потому что у вашей IDE есть правильный путь к классу.
Комментарии:
1. Загрузить jar с commons.apache.org/logging и добавьте в свой путь к классу. Возможно, вам не хватает еще нескольких библиотек
2. jasperforge.org/uploads/publish/jasperreportswebsite/trunk /… содержит таблицу с необходимыми библиотеками.
3. Я добавил все файлы jar из библиотеки jasperreports-4.1.2 , теперь исключение исчезло, и появляется всплывающее окно — «В документе нет страниц», я также вижу сообщение в консоли — «log4j: ПРЕДУПРЕЖДЕНИЕ Для logger не удалось найти никаких добавлений (net.sf.jasperreports.расширения. ExtensionsEnvironment). log4j: ПРЕДУПРЕЖДЕНИЕ Пожалуйста, правильно инициализируйте систему log4j «.
4. «В документе нет страниц» означает, что в источнике данных нет записей, поэтому отчет не генерируется. Вам действительно следует заглянуть в учебник jasper reports / ireport. Из всего, что вы сказали, я понимаю, что вы пытаетесь создать отчет на основе данных, которые не поступают из базы данных. Вам следует создать Java-компонент, привязать его к своему отчету и, наконец, сгенерировать свой отчет с
JRBeanCollectionDataSource
помощью .5. Спасибо, мне удалось создать свой первый отчет. Но я не знаком с компонентами ejb. Поэтому мне пришлось создать базу данных дампа.
Ответ №2:
Да, это верно. "The document has no pages"
означает, что в источнике данных нет записей, поэтому отчет не генерируется.
Ответ №3:
Вы можете установить свойство, при котором в отчете все равно будут отображаться пустые страницы, даже если данные отсутствуют в отчете.
Когда свойство данных НЕ позволит вам выбирать разные значения и другой способ отображения отчета в случае, если набор данных возвращает нулевые строки или в отчете нет данных для печати.