centos Jasper报告:java.lang.NoClassDefFoundError:无法初始化类net.sf.jasperreports.engine.util.JRStyledTextParser

myss37ts  于 2022-11-08  发布在  Java
关注(0)|答案(3)|浏览(466)

我想分享我的经验与一个或多或少常见的错误与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)

我的环境:

  • 内核2.6.32- 504.e16.x86_64内核2.6.32
  • Java 1.7_79(Sun公司)
  • Jasper报告6.2.2
  • ApacheTomcat 7.0.68

同样的问题:

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

mm9b1k5b

mm9b1k5b1#

因此,这里有一些检查要做:

VMWare知识库:https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2010240.
您的环境应该安装X11和/或图形包(字体等),或者您必须使用-Djava.awt.headless=true选项运行Java。对于headless,您的库需要包含字体(默认的JasperReport字体是Pictonic.ttf)

  • 清理Tomcat缓存,不要进行热部署。一些JasperReport版本在某些类中使用ThreadLocal时会出现内存泄漏。例如,请参见http://community.jaspersoft.com/jasperreports-library/issues/4403-0
  • JRStyledTextParser有一个静态初始化器,可以屏蔽一些异常。它特别初始化了字体的加载(在操作系统上或包含在jar中),通过在java. awt中使用Font实现。但是,请参见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的用户/组是否可写。如果不是这样,则会抛出异常,但会捕获异常并且不可见...

nhaq1z21

nhaq1z212#

我在我的开发机器上遇到过同样的问题。基本上是由于应用服务器(Apache tomcat)的问题而发生的。
基本上,我不小心删除了服务器根目录中的“temp”文件夹,所以jasper无法编译报告并继续生成报告。
此外,临时文件夹空间可能会对报告生成过程造成巨大损害。
因此,请检查服务器中的以下项目
1.服务器空间

  1. tomcat服务器中缺少文件夹
hujrc8aj

hujrc8aj3#

我在几个小时后找到了解决方案。如果你使用bitnami docker compose文件,你必须卷java文件夹。报告是用java 1.8_201版本运行的。所以你应该下载1.8_201并将其卷为你的docker compose。

volumes:
  - 'jasperreports_data:/bitnami/jasperreports'
  - '/path/your/downloaded/java:/opt/bitnami/java'

相关问题