首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >net.sf.jasperreports.engine.util.JRStyledTextParser : JasperReports:无法初始化类java.lang.NoClassDefFoundError

net.sf.jasperreports.engine.util.JRStyledTextParser : JasperReports:无法初始化类java.lang.NoClassDefFoundError
EN

Stack Overflow用户
提问于 2017-03-30 09:13:10
回答 3查看 12.5K关注 0票数 4

我想与JasperReports分享我的经验,这或多或少是一个常见的错误。

在执行JasperReports以生成PDF报告时,我有一个例外:

代码语言:javascript
运行
复制
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:667)
net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:983)

我的环境:

  • CentOs 6.6 -内核2.6.32-504.el6.x86_64
  • Java 1.7_79 (Sun)
  • JasperReport 6.2.2
  • Apache Tomcat 7.0.68

同样的问题是:

我尝试了这些解决方案,但没有成功。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-30 09:13:10

所以这里有一些检查要做的:

  • 红帽KB:https://access.redhat.com/solutions/1311113.VMWare KB:US&cmd=displayKC&externalId=2010240。 您的环境应该有X11和/或图形包(字体等)。安装或您必须使用-Djava.awt.headless=true选项运行Java。使用无头字体时,库需要包含字体(默认的JasperReport字体是Pictonic.ttf)
  • 清理您的Tomcat缓存,不要进行热部署。一些JasperReport版本在某些类中有ThreadLocal使用的内存泄漏。参见例如http://community.jaspersoft.com/jasperreports-library/issues/4403-0
  • JRStyledTextParser有一个静态初始化程序,它可以掩盖一些异常。它特别使用java.awt中的字体实现来初始化缓存中字体的加载(在操作系统上或jar中)。但是,请参阅字体的源代码:

私有静态布尔hasTempPermission() { if (System.getSecurityManager() == null) {返回真;} File =空;布尔hasPerm = false;尝试{f= Files.createTempFile("+~JT",".tmp").toFile();f.delete();f= null;hasPerm =真;} catch (Throwable t) { /* inc.任何类型的SecurityException */ }返回hasPerm;}

java.io.tmp文件(如果您指定了它,可以使用java.io.tmp选项)。因此,请检查您的临时文件夹是否已满,无法由用户/ Java PID组写入。如果不是这样的话,就会抛出一个异常,但是它会被捕获并且看不见.

票数 1
EN

Stack Overflow用户

发布于 2017-06-19 11:07:22

在我的开发机器上,我也面临过同样的问题。基本上,这是由于应用服务器(Apache tomcat)中的问题而发生的。

基本上,我无意中删除了服务器根目录中的"temp“文件夹。因此jasper无法编译报表并继续进行报表生成。

此外,临时文件夹空间也会对报表生成过程造成巨大损害。

因此,请检查服务器中的下列项

  1. 服务器空间
  2. tomcat服务器中缺少文件夹
票数 1
EN

Stack Overflow用户

发布于 2021-08-16 12:48:50

我在几个小时后找到了解决办法。如果使用bitnami撰写文件,则必须对java文件夹进行批量处理。报告运行在java 1.8_201版本中。因此,您应该下载1.8_201,并将其批量编写为您的对接器。

代码语言:javascript
运行
复制
volumes:
  - 'jasperreports_data:/bitnami/jasperreports'
  - '/path/your/downloaded/java:/opt/bitnami/java'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43113372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档