java.lang.NoClassDefFoundError: Could not initialize class org.jfree.chart.ChartFactory

java.lang.NoClassDefFoundError: Could not initialize class org.jfree.chart.ChartFactory

我两天前遇到一个问题,我不明白发生了什么。我有一个页面在新服务器上捕获异常。事实上,我们从 jdk 1.6 服务器传递到 jdk 1.7 服务器。在 jdk 1.6 上一切正常,但在新服务器上,使用 JFreeChart 生成图形失败并出现以下错误:

javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class org.jfree.chart.ChartFactory at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:294) at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.xxx.LogFilter.doFilter(LogFilter.java:48) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.xxx.filters.EncodingFilter.doFilter(EncodingFilter.java:32) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:563) at org.ow2.jonas.web.tomcat6.CheckOpenResourcesValve.invoke(CheckOpenResourcesValve.java:73) at org.ow2.jonas.web.tomcat6.tx.TransactionValve.invoke(TransactionValve.java:90) at org.ow2.jonas.web.tomcat6.ResetAuthenticationValve.invoke(ResetAuthenticationValve.java:88) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:615) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.jfree.chart.ChartFactory at com.xxx.VisitorHelper.createTotalChart(VisitorHelper.java:147) at

我无法在本地环境中重现错误。我在其他主题上看到 jvm 选项“-Djava.awt.headless=true”解决了问题,但这不是我的情况...

此外,我可以在耳边的 WEB-INF 存储库中看到 jfreechart-1.0.12.jar 文件,该文件在 pom.xml 上声明如下:

<dependency>
        <groupId>jfree</groupId>
        <artifactId>jfreechart</artifactId>
        <version>1.0.12</version>
</dependency>

我只能看出两台服务器上 jdk-s 的区别。

可能是兼容性问题。 jfree的groupId从2011年开始变了,试试用现在的jfreechart版本:

<dependency>
    <groupId>org.jfree</groupId>
    <artifactId>jfreechart</artifactId>
    <version>1.0.19</version>
</dependency>

如果 jar 确实在您的类路径中,则问题可能是由 IDE 中的错误引起的。清除缓存将解决它。 路径会根据您的 IDE 而改变。 这可能有帮助 How to clear the Cache in NetBeans

终于解决了我的问题。它在我的服务器上缺少一个库,我添加了它 "yum install cups-libs"。 现在我的代码运行良好:)