linux上不能显示Jfreechart的图片文件
出现错误:
Jan 23, 2015 4:19:21 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [DisplayChart] in context with path [/aldb] threw exception [Chart image not found] with root cause
javax.servlet.ServletException: Chart image not found
    at org.jfree.chart.servlet.DisplayChart.service(DisplayChart.java:149)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
html源代码:
/DisplayChart?filename=jfreechart-5351821214105924657.png
文件存在:
find / -name jfreechart-5351821214105924657.png -print 
/home/soft/tomcat7/temp/jfreechart-5351821214105924657.png
ll /home/soft/tomcat7/temp/jfreechart-5351821214105924657.png
-rw-r--r-- 1 root root 21517 Jan 23 16:19 /home/soft/tomcat7/temp/jfreechart-5351821214105924657.png
相关代码:
 File file = new File(System.getProperty("java.io.tmpdir"), filename);
     if (!(file.exists())) {
       throw new ServletException("File '" + file.getAbsolutePath() + "' does not exist");
     }  
     boolean isChartInUserList = false;
     ChartDeleter chartDeleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");  
     if (chartDeleter != null) {
       isChartInUserList = chartDeleter.isChartAvailable(filename);
     }  
     boolean isChartPublic = false;
     if ((filename.length() >= 6) &&
       (filename.substring(0, 6).equals("public"))) {
       isChartPublic = true;
     }  
     boolean isOneTimeChart = false;
     if (filename.startsWith(ServletUtilities.getTempOneTimeFilePrefix())) {
       isOneTimeChart = true;
     }  
     if ((isChartInUserList) || (isChartPublic) || (isOneTimeChart))
     {
       ServletUtilities.sendTempFile(file, response);
       if (isOneTimeChart)
         file.delete();
     }
     else
     {
       throw new ServletException("Chart image not found");
     }  
解决方法:
ServletUtilities.setTempOneTimeFilePrefix("jfreechart"); // 加了这个即可;使得上面代码的第20行结果为true;
String filename = ServletUtilities.saveChartAsPNG(chart, 1024, 400, null, session);
官方解释:
My web application runs fine on my Windows development machine, but when I deploy it to the Unix/Linux production server, it doesn't work. What is the problem?
Most likely your server does not have X11 running. This is a Java (AWT/Java2D) issue, not something that is specific to JFreeChart. There is some more information at Sun's website:
In addition, the following thread in the JFreeChart forum contains some useful information:
REF:
关于jfreechart的几个知识点
http://wangrusheng5200.iteye.com/blog/406876
http://www.jfree.org/jfreechart/faq.html
http://www.cnblogs.com/dkblog/archive/2007/09/25/1980861.html
http://www.2cto.com/os/201411/354304.html
http://www.linuxidc.com/Linux/2011-04/34633.htm
linux上不能显示Jfreechart的图片文件的更多相关文章
- javascript DOM(2)  一个网页上切换显示不同的图片或文本
		摘自: javascript DOM 编程艺术 1. 在一个网页上切换显示不同的图片 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ... 
- OAF_文件系列4_实现OAF上传显示数据库动态图片Image(案例)
		20150805 Created By BaoXinjian 
- Linux上使用程序相对路径访问文件【转】
		转自:http://blog.csdn.net/yinxusen/article/details/7444249 今天一个朋友问我这个问题,说为什么在Windows上跑得很好的应用程序,移植到Linu ... 
- [Java]在窗口界面上画出硬盘中图片文件
		利用类javax.swing.JPanel来在窗口界面上画图.图片文件通过javax.imageio.ImageIO类来获取. import java.awt.Graphics; import jav ... 
- linux上搭建nginx+ftp,实现文件的上传与访问
		ftp服务器搭建 1.新建用户ftpuser并指定主目录为/home/ftpuser (注意:这个目录是后面存储和读取文件的目录) <!--创建用户并指定主目录--> useradd -d ... 
- linux上如何删除文件名乱码的文件
		这里写图片描述今天在服务上发现了两个文件名是乱码的文件,如图所示.这里写图片描述于是想用rm命令把它们删掉,但提示没有此文件. 网上搜了一下,找到解决方法,首先执行ls -i命令,此时在文件前面会出现 ... 
- 在QLabel上同时显示文字和图片的方法
		有两种方法. 1.打开UI文件,在界面右键单击QLabel对象,选改变多信息文本 选择图片再确定,左侧问号就是图片. 2.直接在QLabel写富文本 <html><head/> ... 
- Linux上往mysql中导入SQL文件
		1.首先连上你的服务器 2.进入你安装好的数据库 mysql -uroot -p****, 3.执行命令 source /xxx/xxx.sql 后面是文件的路径 4.如果你要是在本地有数据库管理 ... 
- django部署到linux上不显示.svg图标处理方法
		在setting文件的最开始添加如下内容: import mimetypes mimetypes.add_type("image/svg+xml", ".svg" ... 
随机推荐
- YII配置rabbitMQ时前期工作各种坑
			背景如下: 项目需要做一个订阅/发布的功能,然后一大堆讨论不做说明,确认使用rabbitMQ来做: okay,既然 要这个来做,我们下载这个东西吧!在官网上下载就okay了,不做说明,下载安装的时候会 ... 
- EasyGBS国标流媒体服务器GB28181国标方案安装使用文档
			EasyGBS - GB28181 国标方案安装使用文档 下载 安装包下载,正式使用需商业授权, 功能一致 在线演示 在线API 架构图 EasySIPCMS SIP 中心信令服务, 单节点, 自带一 ... 
- 将方法定义在prototype上的好处
			通常js类定义和使用的是这样的: var Class=function(){}; Class.prototype.sharedFn=function(){}; var instanceA=new Cl ... 
- Java中,由this关键字引发的问题
			很久之前一直有一个疑问,最近重新翻了遍JVM的书,才算是终于有所顿悟.问题如下: 被自己遗忘的问题 package org.hanyan.test.testClass; public class T3 ... 
- MYSQL存储引擎介绍--应用场景
			MySQL存储引擎通常有哪3种?各自分别有什么特点?应用场景是哪些? MySQL5.5以后默认使用InnoDB存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表.若要修改默 ... 
- 《UNIX网络编程》 -- 第五章
			str_cli 和 str_echo 函数 需要先弄清楚 3.9 readn.writen 和 readline 函数 str_cli void str_cli(FILE *fp, int sockf ... 
- JavaScript中对事件简单的理解
			事件(event) 1.什么是JavaScript事件? 事件是文档或浏览器中发生的特定交互瞬间. 2.事件流 事件流描述的是从页面中接受事件的顺序,包含IE提出的事件冒泡流与Netscape提出的事 ... 
- python函数回顾:all()
			描述 all() 函数用于判断给定的可迭代参数 iterable 中的所有元素,是否不为 0.''.False 或者 iterable 为空,如果是返回 True,否则返回 False. 如果是空元组 ... 
- 我的Java开发学习之旅------>二进制、八进制、十进制、十六进制之间转换
			一. 十进制与二进制之间的转换 (1) 十进制转换为二进制,分为整数部分和小数部分 ① 整数部分 方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权 ... 
- docker 批量导出脚本
			用for 循环实现 docker imagesREPOSITORY TAG ... 
