我想与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)
我的环境:
同样的问题:
我尝试了这些解决方案但没有成功。
答案 0 :(得分:1)
所以这里要做一些检查:
-Djava.awt.headless=true
选项运行Java。无头,你的库需要包含字体(默认JasperReport字体是Pictonic.ttf)
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用户/组写入并且是否可写。如果不是这种情况,则会抛出一个异常,但会被捕获并且不可见......
答案 1 :(得分:1)
我在开发机器上遇到了同样的问题。基本上是由于应用服务器( Apache tomcat )
中的问题而发生的基本上我不小心删除了&#34; temp &#34;服务器根目录中的文件因此jasper无法编译报告并继续生成报告。
临时文件夹空间也会对报告生成过程造成巨大损害。
请检查服务器中的以下项目