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

相关代码:

 1 File file = new File(System.getProperty("java.io.tmpdir"), filename);
 2     if (!(file.exists())) {
 3       throw new ServletException("File ‘" + file.getAbsolutePath() + "‘ does not exist");
 4     }
 5
 6     boolean isChartInUserList = false;
 7     ChartDeleter chartDeleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");
 8
 9     if (chartDeleter != null) {
10       isChartInUserList = chartDeleter.isChartAvailable(filename);
11     }
12
13     boolean isChartPublic = false;
14     if ((filename.length() >= 6) &&
15       (filename.substring(0, 6).equals("public"))) {
16       isChartPublic = true;
17     }
18
19     boolean isOneTimeChart = false;
20     if (filename.startsWith(ServletUtilities.getTempOneTimeFilePrefix())) {
21       isOneTimeChart = true;
22     }
23
24     if ((isChartInUserList) || (isChartPublic) || (isOneTimeChart))
25     {
26       ServletUtilities.sendTempFile(file, response);
27       if (isOneTimeChart)
28         file.delete();
29     }
30     else
31     {
32       throw new ServletException("Chart image not found");
33     }  

 解决方法:

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

时间: 2025-01-14 12:26:07

linux上不能显示Jfreechart的图片文件的相关文章

Linux上使用程序相对路径访问文件【转】

转自:http://blog.csdn.net/yinxusen/article/details/7444249 今天一个朋友问我这个问题,说为什么在Windows上跑得很好的应用程序,移植到Linux上后就读不到跟应用程序在同一文件夹下的文件呢,我说,这是linux和Windows在Work directory上设置的不同. 大家都知道,对于Windows而言,应用程序的默认工作目录就是应用程序所在的目录,它一般是不管应用程序是从哪个目录上下文启动的.那么在不更改工作目录的情况下,读文件使用相

在Linux上使用logwatch分析监控日志文件

原文:http://seanlook.com/2014/08/23/linux-logwatch-usage/ 1. 介绍 在维护Linux服务器时,经常需要查看系统中各种服务的日志,以检查服务器的运行状态. 如登陆历史.邮件.软件安装等日志.系统管理员一个个去检查会十分不方便:且大多时候,这会是一种被动的检查,即只有在发现系统运行异常时才会想到去查看 日志以获取异常的信息.那么如何主动.集中的分析这些日志,并产生报告,定时发送给管理员就会显得十分重要. logwatch 是一款用 Perl 语

linux上ln命令详细说明(link 文件连接)

ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目标文件. 当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间.例如:ln –s /bin/less /usr/local/bin/less -s 是代号(symbolic)的意思.

同一个网页上切换显示不同的图片

把图片的浏览链接集中安排在图片的主页面里,当用户点击某个图片的链接就能在当前网页显示 css:代码 ul,li{margin: 0;padding: 0} body{font-family: "Helvetica","Arial","serif","微软雅黑";color:#333;background-color: #ccc; margin: 1px 10%} h1{color:#333;background-color:

在window和linux上通用的SprtLock类头文件

/**@file         SprtLock.h@brief        Sprt锁操作类,SprtLock类 @author      cxw@version     版本编号:1.0   日期:2014-10-28 修订者:Long 修订内容:按照<C++编码规范>修改源文件*//* #pragma once是编译器相关的,有的编译器支持,有的编译器不支持,具体情况请查看编译器API文档,不过现在大部分编译器都有这个杂注了.#ifndef,#define,#endif 是C/C++

linux上如何删除文件名乱码的文件

在服务器上发现了一个文件,文件名乱码: 使用rm命令,想将此文件删除,发现无法删除, 解决方案: 1.使用ls -i命令: 得到了文件的节点号 2.使用find -inum 节点号 -delete,即可删除此文件 原文地址:https://www.cnblogs.com/liu-ke/p/12423898.html

linux上访问浏览器 也可下载文件

Links是用C语言写的一个开源web浏览器,支持包括Linux.Windows.OS X和OS/2在内的所有主流平台.它提供了基于文本和图形界面两种版本.大多数标准的Linux发行版都默认包含了基于文本的版本.如果您的发行版中默认没有安装links,可以通过包管理工具进行安装.Elinks是links的一个衍生版本.ubuntu # apt-get install links # yum install links centos#yum install links -y 访问方式:links

【Android实战】----基于Retrofit实现多图片/文件、图文上传

一.再次膜拜下Retrofit Retrofit无论从性能还是使用方便性上都很屌!!!,本文不去介绍其运作原理(虽然很想搞明白),后面会出专题文章解析Retrofit的内部原理:本文只是从使用上解析Retrofit实现多图片/文件.图文上传的功能. 二.概念介绍 1)注解@Multipart 从字面上理解就是与多媒体文件相关的,没错,图片.文件等的上传都要用到该注解,其中每个部分需要使用@Part来注解..看其注释 /** * Denotes that the request body is m

JFreechart在linux下不显示及中文乱码问题

一.使用JFreeChart建的报表,在window下能正常显示,但是放到linux下就报错,而且有时候会把tomcat挂掉, 原因是jfreechart的在linux系统中需要访问java awt库提供...... 一.使用JFreeChart建的报表,在window下能正常显示,但是放到linux下就报错,而且有时候会把tomcat挂掉,原因是jfreechart的在linux系统中需要访问java awt库提供的图形功能,而linux下的绝大多数版本的java awt类库都需要x serv