java.lang.NoClassDefFoundError
org.jfree.chart.axis.Axis.<init>(Axis.java:180)
at org.jfree.chart.axis.CategoryAxis.<init>(CategoryAxis.java:137)
at org.jfree.chart.axis.CategoryAxis3D.<init>(CategoryAxis3D.java:78)
at org.jfree.chart.ChartFactory.createBarChart3D(ChartFactory.java:507)
解决的办法是:
编辑/etc/profile文件,在最后加入export CATALINA_OPTS='-Djava.awt.headless=true'
即可
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
问题一:
这是你最可能会遇到的错误信息(类似):
Can't connect to X11 window server using ':0.0'......
这是因为jfreechart的在unix-like系统中需要访问java awt库提供的图形功能,而unix下的绝大多数版本的java awt类库都需要x server提供的一些功能。而基本上作服务器的系统都没有启动x server(甚至根本没安装)的,所以就出现了以上的提示信息。
解决的办法有很多,下面只介绍一个最简单的做法:
在你应用服务器的启动脚本中添加以下参数
-Djava.awt.headless=true
或以下指令
export CATALINA_OPTS="-Djava.awt.headless=true"
再重启应用服务器就可以了,假如你用的是resin那么就在$RESIN_HOME/bin/start.sh中添加。
对于这个问题的更详细的信息请查看以下链接:
http://www.idautomation.com/kb/xwindow-error.html
问题二:
图像文件已经生成,但是页面显示不出来,这个主要是路径错误
要使用"/servlet/DisplayChart?filename=" + filename,先要在你的web应用程序的配置文件web.xml中添加以下配置信息
DisplayChart
org.jfree.chart.servlet.DisplayChart
DisplayChart
/servlet/DisplayChart
这个在jfreechart的配置文件中也有说明。
问题三:
中文标签的乱码问题
如果你使用是jdk5.0那么恭喜你,你只要在$JAVA_HOME/jre/lib/fonts下建立fallback文件夹,然后copy中文字体文件进去,重启应用程序服务器就ok了;
(中文字体文件可以是windows/fonts/simsum.ttf 要付费;/usr/share/fonts/chinese/TrueType/gXXX.ttf ;
或者另外下载VeraSansYuanTiMonoXXXX.ttf)
如果你使用的是jdk1.4XXX,那么很不幸你遇到一个big problem咯,你要做三件事:
1)根据网上的介绍修改jre的字体配置文件,添加中文字体;
2)修改jfreechart的source code(主要是org.jfree.chart包),把类似"new Font(...)"代码改成你添加的字体,如"new Font("宋体/Vera Sans YuanTi Mono",Font.BOLD, 18)";
3)通过以上两步,图表的中文字体基本已经出来了,可能你发现图表的title还是乱码,这就要通过程序设定了,示例代码如下:
String title = new String("水果销量统计图");
TextTitle texttitle= new TextTitle(title);
texttitle.setFont(new java.awt.Font("宋体", Font.BOLD, 18));
JFreeChart chart = ChartFactory.createBarChart3D(title,
"水果",
"销量",
dataset,
PlotOrientation.VERTICAL,
false,
false,
false);
chart.setTitle(texttitle);
注意事项:
jfreechart共包含有一下类库:jcommon-0.9.6.jar jfreechart-0.9.21.jar servlet.jar gnujaxp.jar
只有jcommon-0.9.6.jar jfreechart-0.9.21.jar是必须的;
servlet.jar和gnujaxp.jar一般是不需要的,否则跟虚拟机或服务器的自带类库重复的话会产生不可预知的一些问题。