尝试在WebLogic 11g上导出时,会抛出NoClassDefFound异常。我检查了应用程序WAR,jasperreports-3.7.4.jar包含在WEB-INF / lib文件夹中。错误是什么?
栈跟踪
java.lang.NoClassDefFoundError: 净/平方英尺/ JasperReports的/发动机/ UTIL / JRStyledTextParser 在 net.sf.jasperreports.engine.fill.JRBaseFiller。(JRBaseFiller.java:181) 在 net.sf.jasperreports.engine.fill.JRVerticalFiller。(JRVerticalFiller.java:76) 在 net.sf.jasperreports.engine.fill.JRVerticalFiller。(JRVerticalFiller.java:86) 在 net.sf.jasperreports.engine.fill.JRVerticalFiller。(JRVerticalFiller.java:56) 在 net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:142) 在 net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:78) 在 net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624) 在 org.springframework.web.servlet.view.jasperreports.AbstractJasperReportsView.fillReport(AbstractJasperReportsView.java:676) 在
答案 0 :(得分:32)
最后,我已经开始工作了。我检测到根Exception,它在NoClassDefFoundError之前抛出:net / sf / jasperreports / engine / util / JRStyledTextParser:
java.lang.NoClassDefFoundError: sun/awt/X11GraphicsEnvironment
Unix和Linux上的Sun AWT课程依赖于X Window系统。当您使用这些类时,他们希望加载X客户端库并能够与X显示服务器通信。如果您的客户端有GUI,这是有意义的;不幸的是,即使您的客户使用AWT但没有GUI(这是我的情况,从Web应用程序生成报告),它也是必需的
绕过此方法的方法是在系统启动时设置系统属性java.awt.headless=true
。
答案 1 :(得分:4)
我遇到了同样的问题,我们通过安装xorg字体包和ttf字体解决了这个问题。
答案 2 :(得分:2)
Text Parsing Exception表示尚未识别字体。我花了一整天试图理解为什么,然后最后我使用文本SansSerif解决了这个问题。在Linux上只能解析一些字体。希望有所帮助, 最好的问候
答案 3 :(得分:1)
我们有类似的问题。我们通过使用jasper java flow jar文件来解决它。
java.awt.headless=true
对我们没用。
答案 4 :(得分:0)
如果没有足够的空间,则会收到相同的错误。我有同样的错误,因为服务器硬盘上有0KB的可用空间。
答案 5 :(得分:0)
我有同样的问题,它通过减少/ tmp空间来解决。它是100%(/ tmp文件夹)。我将它减少到86%并重新启动服务器并且noclassdefinitionerror已经消失并且问题已经解决。
答案 6 :(得分:0)
多次面对这个问题我得到了解决方案。 此错误是由于磁盘上缺少内存空间... 您可以尝试以下方法来解决: (i)在tmp文件夹中留出足够的空间 (ii)删除磁盘上的一些不必要的文件以腾出空间。
祝你好运..希望......它应该解决你的问题
答案 7 :(得分:0)
一旦遇到此问题,谷歌搜索将带您到这里。对我来说,问题是Jdk 11.2。
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:84)
... 85 more
Caused by: java.lang.NullPointerException
at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1262)
at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:225)
at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:107)
at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:719)
at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:367)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:312)
at java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35)
at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56)
... 90 more
java.lang.InternalError: java.lang.reflect.InvocationTargetException
at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:86)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.desktop/sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
at java.desktop/sun.java2d.SunGraphicsEnvironment.getFontManagerForSGE(SunGraphicsEnvironment.java:189)
at java.desktop/sun.java2d.SunGraphicsEnvironment.getAvailableFontFamilyNames(SunGraphicsEnvironment.java:223)
at java.desktop/sun.java2d.SunGraphicsEnvironment.getAvailableFontFamilyNames(SunGraphicsEnvironment.java:251)
at java.desktop/sun.java2d.HeadlessGraphicsEnvironment.getAvailableFontFamilyNames(HeadlessGraphicsEnvironment.java:75)
at net.sf.jasperreports.engine.util.JRStyledTextParser.<clinit>(JRStyledTextParser.java:94)
at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:110)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:69)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:57)
at net.sf.jasperreports.engine.fill.JRFiller.createBandReportFiller(JRFiller.java:200)
at net.sf.jasperreports.engine.fill.JRFiller.createReportFiller(JRFiller.java:215)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:115)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:667)
尝试过的解决方案
之所以会出现此问题,是因为某些字体的支持已被删除
摘自Oracle发行说明 https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html#Removed
从Oracle JDK删除Lucida字体Oracle JDK不再发货 任何字体,并且完全依赖于操作系统上安装的字体 系统。
这意味着Bigelow&Holmes Lucida家族(Lucida Sans,Lucida Bright和Lucida Typewriter)不再适用于 JDK中的应用程序。
如果应用程序依赖JDK附带的字体,则可能需要 已更新。
如果系统管理员运行的Java服务器应用程序依赖于 在JDK上提供的字体上,而不是在系统字体包上, 在系统字体包被删除之前,应用程序可能无法运行 已安装。
返回以前的JDK版本,或者您可以尝试升级Jasper。
答案 8 :(得分:0)
对于我的情况,jasperreports 6.8.0从版本更改了项目依赖项xml-apis
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>2.0.2</version>
</dependency>
到
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.4.01</version>
</dependency>
在jaspersoft社区论坛https://community.jaspersoft.com/questions/825173/could-not-initialize-class-netsfjasperreportsengineutiljrstyledtextparser中建议
答案 9 :(得分:0)
我必须在我的高山linux中安装xfce4字体包。实际上,我正在使用docker。因此,我将以下命令放入dockerfile中:
RUN apk add xfce4
答案 10 :(得分:0)
这是由于缺少字体。我可以通过安装fontconfig和urw-fonts软件包来解决此问题。
yum install fontconfig
yum install urw-fonts
之后,您可以使用命令检查受支持的字体
fc-list
如果仍未生成报告,则可能需要重新启动服务器。