java - Tomcat : JRStyledTextParser not Initialized. java.awt 设置为 true

标签 java jasper-reports servlet-3.0

我不断收到java.lang.NoClassDefFoundError:无法初始化类net.sf.jasperreports.engine.util.JRStyledTextParser

完整的堆栈跟踪是:

java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser
net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:108)
net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:69)
net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:57)
net.sf.jasperreports.engine.fill.JRFiller.createBandReportFiller(JRFiller.java:200)
net.sf.jasperreports.engine.fill.JRFiller.createReportFiller(JRFiller.java:215)
net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:115)
net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:583)
net.sf.jasperreports.engine.JasperRunManager.runToPdf(JasperRunManager.java:455)
net.sf.jasperreports.engine.JasperRunManager.runReportToPdf(JasperRunManager.java:870)
com.evnica.interop.main.ReportServlet.createReport(ReportServlet.java:119)
com.evnica.interop.main.ReportServlet.doGet(ReportServlet.java:96)
com.evnica.interop.main.ReportServlet.service(ReportServlet.java:79)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

我已经搜索了解决方案并找到了一堆。

还有大约 10 个(这是我的第一个问题,所以我无法将它们全部列出)。

我已经尝试过:

  1. 设置java.awt.headless=true

我在代码中做到了:

 static {
    System.setProperty("java.awt.headless", "true");
    System.out.println(java.awt.GraphicsEnvironment.isHeadless());
 }

(按预期返回 true)。

我是在 JVM 选项中完成的: enter image description here

我将 CATALINA_OPTS 设置为 -Djava.awt.headless=true。正如预期的那样回声。

没有帮助。

我使用 DejaVu Sans 和 jasperreports-fonts-6.2.2.jar 对其进行了测试,并使用 Sans Serif 对其进行了测试。我检查了 JVM 可用的字体并用它们进行了测试。没有成功。

有人建议检查 jasperreports jar 的版本 - 我也检查了。我有6.2.2的所有 jar 。版本:

jasperreports-6.2.2.jar, 
jasperreports-fonts-6.2.2.jar, 
jasperreports-javaflow-6.2.2.jar.

我使用joda-time-2.9.3(不知道它与问题有何联系,但一个建议是使用joda;无论如何我从一开始就使用它),项目SDK是java 1.8.0_51(有更新到 8 的建议 - 不相关,因为我已经在使用它了),而且我的 Tomcat 没问题(在其中一种情况下,缺少的工作文件夹导致了类似的问题)。

我错过了什么?

编辑: 在调试时,我遇到了 JRGraphEnvInitializer 类中的initializeGrophEnv() 方法,该方法抛出 util.graphic.environment.initialization.error:

AVAILABLE_FONT_FACE_NAMES.addAll(Arrays.asList(GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames()));

有趣的是,SunGraphicsEnvironment 中的 getAvailableFontFamilyNames() 方法返回一个包含 274 个元素的有效数组(链接下调试器的打印屏幕):

enter image description here

最佳答案

首先感谢大家的帮助。你回复得太快了,让我更深入地挖掘=)问题解决了。

我的错误是库中同时包含 jasperreports-6.2.2.jarjasperreports-javaflow-6.2.2.jar 。您还记得,堆栈跟踪中的最后一个方法是 JRBaseFiller 的初始化。两个 jar 的存在导致了冲突,因为它们都包含一个 net.sf.jasperreports.engine.fill 包,其中包含一个 JRBaseFiller 类。

我只留下了jasperreports-javaflow-6.2.2.jar。它本身不起作用。我又添加了两个库:jfreechart-1.0.19.jar(以前的版本未包含所有需要的类)和jcommon-1.0.8java.lang.NoClassDefFoundError 消失了。

关于java - Tomcat : JRStyledTextParser not Initialized. java.awt 设置为 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37432300/

相关文章:

java - 我可以跳过 HttpServletRequest.login() 并将经过身份验证的用户放入 session 中吗?

java - 不小心删除了eclipse中的默认输出文件夹

java - 如何使用 Hibernate 填充实体的两个字段?

java - Android 应用程序不像在 Android Studio 中那样显示在设备上

java - 从 java 生成带有子报告的 Jasper 报告

java - 从 Java 代码中获取 "No query executer factory registered for the ' plsql' 语言“异常

grails - Grails Jasper子报表

java - ServletContext.getRealPath() 是否适用于网络片段?

osgi - 在 Servlet 3.0 服务器(如 Tomcat 7)中使用 Felix

java - 从 JSONArray 中删除可重复的值 (Java)