我想与我分享JasperReports或多或少常见错误的经验。

执行JasperReports制作PDF报告时,我有一个例外:

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)


我的环境:


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


同样的问题:


java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser
http://community.jaspersoft.com/questions/536539/noclassdeffounderror-jrstyledtextparser-initialization-failure


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

最佳答案

所以在这里做一些检查:


Red Hat KB:https://access.redhat.com/solutions/1311113
 VMWare KB:https://kb.vmware.com/selfservice/microsites/search.do?language=en_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中的Font工具,它特别初始化了缓存中字体的加载(在OS上或包含在jar中)。但是,请参见Font的源代码:

private static boolean hasTempPermission() {

if (System.getSecurityManager() == null) {
    return true;
}
File f = null;
boolean hasPerm = false;
try {
    f = Files.createTempFile("+~JT", ".tmp").toFile();
    f.delete();
    f = null;
    hasPerm = true;
} catch (Throwable t) {
    /* inc. any kind of SecurityException */
}
return hasPerm;
}



Java创建临时文件(如果已指定,请使用java.io.tmp选项)。因此,请检查您的临时文件夹是否已满,并且不能被Java PID的用户/组写入。如果不是这种情况,将引发异常,但会捕获并使其不可见...

关于java - JasperReports:java.lang.NoClassDefFoundError:无法初始化类net.sf.jasperreports.engine.util.JRStyledTextParser,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43113372/

10-11 22:31
查看更多