Не удалось инициализировать класс net.sf.jasperreports.engine.util.JRStyledTextParser
Я пытаюсь отображать свои отчеты в браузере, но я продолжаю получать эту ошибку:
![enter image description here]()
странная вещь об этом заключается в том, что это происходит только при попытке сгенерировать отчеты из версии, установленной на сервере, но не тогда, когда я делаю это локально с моего компьютера
Есть ли у вас какие-либо идеи, почему это происходит?
Ответы
Ответ 1
Это похоже на проблему с режимом безголового. Вам нужно установить для свойства java.awt.headless
значение true
. Это можно сделать, используя:
static {
System.setProperty("java.awt.headless", "true");
}
Или, установив свойство headless в команду запуска tomcat как -Djava.awt.headless=true
Кроме того, вы можете узнать больше о том, почему это необходимо, вы можете прочитать о режиме безглавых здесь
Ответ 2
Это также может быть вызвано отсутствием/недоступным каталогом Java temp. В Font.java создаются файлы temp:
Files.createTempFile("+~JF", ".tmp").toFile();
В одной системе параметр "temp" отсутствовал в папке Tomcat, но Java был настроен на его использование:
-Djava.io.tmpdir=C:\Program Files (x86)\Apache Software Foundation\Tomcat 7.0\temp
BTW. первый раз, после перезапуска Tomcat, служба фактически бросала исключение IOException, но затем JasperReports кэшировала что-то, а при последующих вызовах трассировка стека была точно такой, как сообщалось здесь.
Ответ 3
Это недостающие банки в проблеме пути к классам.
У меня была эта проблема, и я обнаружил, что с помощью добавления отсутствующих jar файлов в путь к классам это решило проблему
Из приведенной ниже статьи java.dzone.com я обнаружил, что минимальные необходимые фляги... Сейчас номера версий изменились, но только с этими библиотеками мне удалось заставить его работать.
- JasperReports-2.0.4.jar
- Обще-варочного-1.7.jar
- commons-collection-2.1.jar(commons-collection.jar)
- Обще-каротаж 1.0.2.jar
- Обще-beanutils.jar
- iText-2.0.7.jar (используется для экспорта информации в PDF)
Ответ 4
Для тех, кто все еще сталкивается с этой проблемой: на Ubuntu Server 12.04 с безголовым OpenJDK JRE он просто был разрешен
apt-get install ttf-dejavu-extra
Ответ 5
Я получил эту ошибку при развертывании приложения Springboot (включая отчеты Jasper) в Docker-контейнере. Проблема была с openjdk: 8-JDK-Alpine, который я использовал для создания среды Docker- контейнера. Это ошибка в поддержке шрифтов. Поэтому я перешел на openjdk: 8-jre (или версии OpenJDK 7 также помогут), и у меня это сработало. Я потратил несколько дней, чтобы исправить эту ошибку.
Ответ 6
Чтобы устранить проблему, выполните следующие действия:
- Переключение с Open JDK на Sun JDK
- Установленные шрифты MS Core.
- Упакованная библиотека библиотеки шрифтов JasperReport с приложением
Ответ 7
Это могут быть проблемы с памятью, перезагрузка сервера.
Ответ 8
Немного поздно, но вот почему мы столкнулись с этой проблемой... Недавно мы начали разрабатывать IntelliJ вместо Eclipse. Мы просто забыли запустить IntelliJ в качестве администратора... Мы уже давно это сделали с Eclipse, но просто не думали об этом с IntelliJ.
В конце концов, я думаю, шрифты не были найдены или папка не была найдена, так как было недостаточно прав на чтение/запись на диске c.
Ответ 9
Получена та же ошибка - очевидно, JRStyledTextParser использует зависимость от xml-apis
Добавив xml-apis, я исправил его
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.4.01</version>
</dependency>
Ответ 10
В моем случае я использовал шрифты Arial для этого, я настроил arial шрифты в irfonts.xml
который был как ниже
< fontFamily name= "Arial" > <normal> < [CDATA [fonts/arial.ttf]] > </normal> <bold> < [CDATA [fonts/arialbd.ttf]] > </bold> <italic> < [CDATA [шрифты/ariali.ttf]] >
</наклонным >
<BoldItalic> <! [CDATA [шрифты/arialbi.ttf]] >
</BoldItalic>
<pdfEmbedded> <! [CDATA [истинно]] >
</pdfEmbedded> </FontFamily>
но это должно быть как:
< fontFamily name= "Arial" > <normal> < [CDATA [fonts/arial.ttf]] > < < < → > <bold> <! [CDATA [шрифты/arialbd.ttf]] > </жирный шрифт >
< наклонный > <! [CDATA [шрифты/ariali.ttf]] > </наклонный >
<BoldItalic> <!
[CDATA [шрифты/arialbi.ttf]] > </BoldItalic>
<pdfEmbedded> <!
[CDATA [истинно]] > </pdfEmbedded>
</FontFamily>
поэтому их было пробелом перед конечным тегом каждого тега в файле конфигурации. Я исправил его, удалив пространство между ними.
Ответ 11
Я искал несколько часов для той же проблемы, и мое решение не относится ни к кому из других.
Из-за плохого обновления моей версии отчетов jasper у меня было несколько версий jarperreports jar файла в моем пути к классам. Убедитесь, что у вас есть только один файл jasperreports jar...
Ответ 12
Это может помочь, у меня была такая же ошибка, и все остальные решения не работали.
Я исправил его, обновив до java8.
Ответ 13
В нашем случае это помогло удалить временный сервер (таким образом, убедитесь, что нет двуречьеваров) и перезапустить сервер.
Подсказка: попробуйте это, если ошибка начнется после новой версии (но работала до и ничего не изменилось в релизе)
Ответ 14
Я столкнулся с той же проблемой на моей машине разработки. В основном это произошло из-за проблемы на сервере приложений (Apache tomcat)
В основном я случайно удалил папку temp в корне сервера. Так что jasper can not компилирует отчет и приступает к генерации отчета.
Ответ 15
В моем случае проблема была с jdk8, который я использовал для создания образа докера, но после некоторого поиска я переключился на jre. Это исправило мою ошибку. Я думаю, что вы можете попробовать любое изображение, а не использовать JDK8.
Ответ 16
Для меня проблема AdoptOpenJDK
ошибки в AdoptOpenJDK
: https://github.com/AdoptOpenJDK/openjdk-build/issues/682
Я исправил проблему, установив ttf-dejavu
вручную в моем файле Docker
FROM adoptopenjdk/openjdk8:alpine-jre
# Workaround for wrong font configuration in adoptopenjdk
# https://github.com/AdoptOpenJDK/openjdk-build/issues/682
RUN apk update && apk upgrade \
&& apk add --no-cache ttf-dejavu \
# Install windows fonts as well. Not required..
&& apk add --no-cache msttcorefonts-installer \
&& update-ms-fonts && fc-cache -f
Ответ 17
Вы можете попробовать перейти на jdk7, это работает для меня.
извините мой английский!