使用servlet显示jfreecharts



我有一个场景,需要显示图表(使用jfreecharts生成(,将其转换为png图像,然后使用servlet显示。

当图表代码扩展ApplicationFrame或Jframe时,当我使用servlet显示它时,我会看到以下异常:

java.awt.HeadlessException:没有设置X11 DISPLAY变量,但是这个程序执行了一个需要它的操作。位于java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnviironment.java:159(在java.awt.Window.(Window.java:317(在java.awt.Frame.(Frame.java:419(位于javax.swing.JFrame.(JFrame.java:194(

我读了几个地方,这似乎是因为ApplicationFrame和JFrame会导致这个错误。

如果我只通过图表对象,就会抛出

java.lang.IollegalArgumentException:"chart"参数为Null。org.jfree.chat.ChartUtilities.writeChartAsPNG(ChartUtilities.java:181(org.jfree.chat.ChartUtilities.writeChartAsPNG(ChartUtilities.java:136(

有什么解决办法吗?

ChartUtilities是正确的选择;流也是受支持的。一种方法需要在Java SE平台中使用Headless Mode,但我也使用了VNC。

附录:这里有一个相关的论坛帖子。

我将以简单的方式向您解释,因为我在新的时候遇到了同样的问题。

步骤

  1. 创建servlet
  2. 在doPost中创建输出流
  3. 将内容类型设置为text/png
  4. 创建数据集
  5. 将值设置到数据集
  6. 创建jfreechart的实例,并使用ChartFqactory调用createchart(您想要使用的图表(
  7. 最后使用ChartUtilities调用WriteChartAsPNG,并传递Jfreechart实例、outputstream、width和height

完成:

以下的样本

 package polo;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

/**
 * Servlet implementation class PieChartDemo1Serv
 */
public class PieServ extends HttpServlet implements useme {
    private static final long serialVersionUID = 1L;
    /**
     * @see HttpServlet#HttpServlet()
     */
    public PieServ() {
        super();
        // TODO Auto-generated constructor stub
    }
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    doPost(request, response);
    }
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType("image/png");   
        ServletOutputStream out = response.getOutputStream();
        DefaultPieDataset pieDataset = new DefaultPieDataset();
        pieDataset.setValue("In-Network ", .80);
        pieDataset.setValue("Out-of-Network ", .20);

        JFreeChart chart = ChartFactory.createPieChart("", pieDataset, true, true, false);
ChartUtilities.writeChartAsPNG(out, chart, 202, 182);
    System.out.println("done23");
    }

}

现在我更了解你了。研究饼图/图例以设置边框和格式。你可以做得更远。

相关内容

  • 没有找到相关文章

最新更新