无法初始化类net.sf.jasperreports.engine.util.JRStyledTextParser

时间:2011-02-15 00:06:46

标签: jasper-reports

我正在尝试在浏览器上显示我的报告,但我一直收到此错误:

enter image description here

关于这一点的奇怪之处在于,它只会在我尝试从服务器上安装的版本生成报告时发生,而不是在我从我的电脑本地生成报告时

你知道为什么会这样吗?

21 个答案:

答案 0 :(得分:7)

这也可能是由于缺少/无法访问的Java& temp'目录。在Font.java中,正在创建临时文件:

Files.createTempFile("+~JF", ".tmp").toFile();

在一个系统上,' temp'在Tomcat文件夹下缺少dir,但Java已配置为使用它:

-Djava.io.tmpdir=C:\Program Files (x86)\Apache Software Foundation\Tomcat 7.0\temp

顺便说一句。第一次,在重新启动Tomcat之后,该服务实际上抛出了一个IOException,但随后JasperReports缓存了一些内容,并且在后续调用中,堆栈跟踪完全按照此处的报告进行。

答案 1 :(得分:7)

这似乎是无头模式问题。您需要将java.awt.headless属性设置为true。这可以使用:

完成
static {
    System.setProperty("java.awt.headless", "true");
}

或者,通过将tomcat启动命令中的无头属性设置为-Djava.awt.headless=true

此外,您可以阅读更多关于为什么这是必要的内容,您可以阅读有关无头模式的here

答案 2 :(得分:6)

这是类路径问题中缺少的jar。

我遇到了这个问题,发现通过将缺少的jar添加到类路径中,它解决了这个问题。

从下面的文章 java.dzone.com article 我发现必要的最小罐子是......现在版本号已经改变了,但只有这些库才能让它运转起来。

  • 的JasperReports-2.0.4.jar
  • 公地消化器-1.7.jar
  • commons-collections-2.1.jar(commons-collections.jar)
  • 共享记录-1.0.2.jar
  • commons-beanutils.jar
  • iText-2.0.7.jar(用于infor PDF导出)

答案 3 :(得分:5)

对于仍然遇到此问题的人:在Ubuntu Server 12.04上使用无头OpenJDK JRE,它只是通过

解决了
apt-get install ttf-dejavu-extra

答案 4 :(得分:4)

要解决此问题,请执行以下操作:

  1. 从Open JDK切换到Sun JDK
  2. 已安装的MS核心字体
  3. 带有应用程序的打包JasperReport字体库jar

答案 5 :(得分:4)

这可能是内存问题,重启服务器。

答案 6 :(得分:4)

在docker容器中部署springboot应用程序(包括jasper报告)时遇到此错误。问题是我用来构建docker容器环境的 openjdk:8-jdk-alpine 。在字体支持方面存在一个错误。因此,我切换到了 openjdk:8-jre (或者OpenJDK 7版本也将有所帮助),它对我有用。 我花了几天的时间修复此错误。

答案 7 :(得分:3)

我知道我来晚了,但是忍不住回答这个问题,以帮助很多遇到麻烦的人。经过大量的试验和错误,发现tomcat的catalina.properties中排除了xml-apis jar。从那里删除它,它应该可以工作。直到现在都没有发现任何副作用,效果很好。

此外,请确保已安装字体,并检查gradle / pom的合并策略(如果在xml-apis jar上进行了任何排除)。

顺便说一句,在升级到jdk11并从tomcat 8升级到9之后,这个问题开始出现。

答案 8 :(得分:1)

有点晚了,但这就是我们遇到这个问题的原因......我们最近开始使用IntelliJ而不是Eclipse进行开发。我们只是忘了以管理员身份运行IntelliJ ...我们已经用Eclipse做了很长时间了,但是根本没有用IntelliJ来思考它。 最后,我猜没有找到字体或找不到文件夹,因为没有足够的权限在c盘上读/写。

答案 9 :(得分:0)

使用 Payara(在我的情况下为 4)已经有 -Djava.awt.headless=true,我们使用的是 Jasper 6.6.0 但降级到 6.4.0(对于另一个依赖项) 我们在用 oracle JDK 8u281 全新安装 payara4 时遇到了同样的问题,降级到 8u181 或 8u171 解决了

答案 10 :(得分:0)

对我来说,这个错误是因为我升级了 JasperSoft Studio,此后新的或编辑过的报告在更新的 JasperReports 版本中编译,因此服务器无法读取。 Studio 中有一个编译兼容模式,但我无法使其工作,并且我在服务器上运行的版本 (6.6.0) 未在兼容版本列表中列为选项(并使用其他“关闭”版本也不起作用)。

我最终安装了旧版 Studio 6.6.0,并在其中重新编译了我的报告。当我将新的 .jasper 文件部署到服务器时,它们立即开始工作,一切又恢复正常。

答案 11 :(得分:0)

有2个步骤可以解决此问题。

  1. -Djaav.awt.headless = true在启动脚本或虚拟机选项中

  2. 安装字体

    yum install fontconfig

然后您可以验证

rpm -qa | grep font
fontpackages-filesystem-1.44-8.el7.noarch
dejavu-fonts-common-2.33-6.el7.noarch
fontconfig-2.13.0-4.3.el7.x86_64
dejavu-sans-fonts-2.33-6.el7.noarch

这是在CentOS 7上。 我们一直在使用Google Noto字体,并认为我们不需要安装任何字体,但是是错误的。

答案 12 :(得分:0)

对我来说,问题在于AdoptOpenJDK中的错误:https://github.com/AdoptOpenJDK/openjdk-build/issues/682

我通过在dockerfile中手动安装ttf-dejavu来解决此问题

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

并通过运行带有标志-Djava.awt.headless=true的应用程序

答案 13 :(得分:0)

在我的情况下,问题是我用来构建docker映像的jdk8,但是经过一番搜索后,我切换到了jre。那解决了我的错误。我认为您可以尝试使用任何图像,而不必使用jdk8。

答案 14 :(得分:0)

我在开发机器上遇到了同样的问题。基本上是由于应用服务器( Apache tomcat

中的问题而发生的

基本上我不小心删除了服务器根目录中的“ temp ”文件夹。因此jasper无法编译报告并继续生成报告。

答案 15 :(得分:0)

在我们的例子中,它有助于删除临时服务器(从而确保没有jar重复)并重新启动服务器。 提示:如果错误在新版本发生后开始(但之前有效,并且在发布中没有任何相关更改),请尝试此操作

答案 16 :(得分:0)

这可能有所帮助,我遇到了同样的错误,其他所有解决方案都没有用。

我通过更新到java8来修复它。

答案 17 :(得分:0)

我搜索了几个小时的同一个问题,我的解决方案都没有提到其他人。

由于我的jasper报告版本更新不好,我的classpath上有多个版本的jasperreports jar文件。确保你只有一个jasperreports jar文件......

答案 18 :(得分:0)

在我的情况下,我使用的是Arial字体,我在irfonts.xml中配置了arial字体 这就像下面的

< fontFamily name =“Arial”>
< normal><![CDATA [fonts / arial.ttf]]> < / normal>
< bold><![CDATA [fonts / arialbd.ttf]]>
< / bold>
< italic><![CDATA [字体/ ariali.ttf]] GT;
< /斜体>
< BOLDITALIC><![CDATA [字体/ arialbi.ttf]] GT;
< / BOLDITALIC&GT ;
< pdfEmbedded><![CDATA [TRUE]]>
< / pdfEmbedded>< / fontFamily中>
但应该是这样的:
< fontFamily name =“Arial”>
< normal><![CDATA [fonts / arial.ttf]]><
/ normal>< bold> <![CDATA [字体/ arialbd.ttf]] GT;< /粗体>
&LT;斜体&GT;&LT;![CDATA [字体/ ariali.ttf]] GT;&LT; /斜体&GT; <无线电通信/>&LT; BOLDITALIC&GT;&LT ;!
[CDATA [字体/ arialbi.ttf]] GT;&LT; / BOLDITALIC&GT;
&LT; pdfEmbedded&GT;&LT ;!
[CDATA [TRUE] ]&GT;&LT; / pdfEmbedded&GT;
&LT; / fontFamily中&GT;
所以它们是上面配置文件中每个标签的结束标记之前的空格。
我通过删除它们之间的空格来修复它。

答案 19 :(得分:0)

得到了同样的错误 - 显然JRStyledTextParser正在使用来自xml-apis的依赖项 通过添加xml-apis,我得到了修复

<dependency>
    <groupId>xml-apis</groupId>
    <artifactId>xml-apis</artifactId>
    <version>1.4.01</version>
</dependency>

答案 20 :(得分:-1)

您可以尝试降级到jdk7,这对我有用。

抱歉,我的英文!