net.sf.jasperreports.engine.util.JRStyledTextParser上的JasperReports NoClassDefFoundError异常

时间:2010-09-02 14:51:36

标签: java jasper-reports

尝试在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)     在

11 个答案:

答案 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)

尝试过的解决方案

  • 使用JDK 11.02在本地运行。没问题。因为问题发生了 在linux 64系统上
  • 在服务器-Djava-awt.headeless = true上运行为 由一些用户建议。问题仍然存在。

之所以会出现此问题,是因为某些字体的支持已被删除

摘自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

如果仍未生成报告,则可能需要重新启动服务器。