NullPointerException when trying to overlay

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
DopeForADay
Posts: 32
Joined: Thu Apr 22, 2004 9:15 am

NullPointerException when trying to overlay

Post by DopeForADay » Thu Jul 29, 2004 2:33 pm

Hello,

I'm trying to make a chart that contains a XYPlot using TimeSeriesCollections as datasets. Now I wanted to try to set one renderer of the Collections to StandardXYItemRenderer and the other one to XYBarRenderer(). So I did that, compiled it, tried to run it and I've got a NullPointerException thrown. Can anybody tell me what I'm doing wrong?

Here's my code:

Code: Select all


import org.jfree.ui.ApplicationFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardLegend;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.Week;
import org.jfree.data.time.TimeSeries;
import org.jfree.chart.renderer.StandardXYItemRenderer;
import org.jfree.chart.renderer.XYBarRenderer;
import org.jfree.chart.axis.AxisLocation;

public class OverlaidChartTest
extends ApplicationFrame
{

    public OverlaidChartTest(String title)
    {

	super(title);

	JFreeChart chart = createChart();
	ChartPanel panel = new ChartPanel(chart);
	setContentPane(panel);

    } //OverlaidChartTest()

    private JFreeChart createChart()
    {

	XYPlot plot = new XYPlot();
	
	TimeSeriesCollection collection = new TimeSeriesCollection();
	
	TimeSeries series = new TimeSeries("Serie 1", Week.class);
	
	Week week = new Week(25, 2003);

	series.add(week, 10);

	week = new Week(26,2003);

	series.add(week, 20);

	week = new Week(27,2003);

	series.add(week, 30);

	collection.addSeries(series);

	plot.setDataset(collection);

	plot.setRenderer(new XYBarRenderer());

	collection = new TimeSeriesCollection();

	series = new TimeSeries("Serie 2", Week.class);

	week = new Week (25,2003);

	series.add(week, 40);

	week = new Week(26,2003);

	series.add(week, 50);

	week = new Week(27,2003);

	series.add(week,60);

	collection.addSeries(series);

	plot.setDataset(1, collection);

	plot.setRenderer(1, new StandardXYItemRenderer());

	plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
	plot.setRangeAxisLocation(AxisLocation.TOP_OR_LEFT);

	JFreeChart chart = new JFreeChart(plot);
	chart.setTitle("Overlaid Test");
	chart.setLegend(new StandardLegend());

	return chart;

    }

    public static void main(String[] args) {

	OverlaidChartTest oct = new OverlaidChartTest("Overlaid Chart Test");
	oct.pack();
	oct.setLocation(400,300);
	oct.setVisible(true);

    }

} //OverlaidChartTest


And here's the exception it throws (I'm usind j2sdk se 1.4.03):

Code: Select all

java.lang.NullPointerException
        at org.jfree.chart.plot.XYPlot.drawQuadrants(XYPlot.java:1896)
        at org.jfree.chart.plot.XYPlot.drawBackground(XYPlot.java:1878)
        at org.jfree.chart.plot.XYPlot.draw(XYPlot.java:1743)
        at org.jfree.chart.JFreeChart.draw(JFreeChart.java:905)
        at org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:987)
        at javax.swing.JComponent.paint(JComponent.java:808)
        at javax.swing.JComponent.paintChildren(JComponent.java:647)
        at javax.swing.JComponent.paint(JComponent.java:817)
        at javax.swing.JLayeredPane.paint(JLayeredPane.java:557)
        at javax.swing.JComponent.paintChildren(JComponent.java:647)
        at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4794)
        at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4740)
        at javax.swing.JComponent.paint(JComponent.java:798)
        at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
        at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
        at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
        at java.awt.Container.paint(Container.java:1312)
        at sun.awt.RepaintArea.paint(RepaintArea.java:177)
        at sun.awt.motif.MComponentPeer.handleEvent(MComponentPeer.java:405)
        at java.awt.Component.dispatchEventImpl(Component.java:3678)
        at java.awt.Container.dispatchEventImpl(Container.java:1627)
        at java.awt.Window.dispatchEventImpl(Window.java:1606)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
Thank you

david.gilbert
JFreeChart Project Leader
Posts: 11734
Joined: Fri Mar 14, 2003 10:29 am
antibot: No, of course not.
Contact:

Post by david.gilbert » Thu Jul 29, 2004 2:43 pm

You didn't add any axes to the plot. I also added a couple of settings to your datasets to alter the alignment slightly, here's my code:

Code: Select all

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardLegend;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.StandardXYItemRenderer;
import org.jfree.chart.renderer.XYBarRenderer;
import org.jfree.data.time.TimePeriodAnchor;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.Week;
import org.jfree.ui.ApplicationFrame;

public class OverlaidChartTest extends ApplicationFrame {

    public OverlaidChartTest(String title) {

        super(title);

        JFreeChart chart = createChart();
        ChartPanel panel = new ChartPanel(chart);
        setContentPane(panel);

    } //OverlaidChartTest()

    private JFreeChart createChart() {

        XYPlot plot = new XYPlot();
        TimeSeriesCollection collection = new TimeSeriesCollection();
        TimeSeries series = new TimeSeries("Serie 1", Week.class);
        Week week = new Week(25, 2003);
        series.add(week, 10);
        week = new Week(26, 2003);
        series.add(week, 20);
        week = new Week(27, 2003);
        series.add(week, 30);
        collection.addSeries(series);
        collection.setDomainIsPointsInTime(false);
        plot.setDataset(collection);
        plot.setRenderer(new XYBarRenderer());
        collection = new TimeSeriesCollection();
        series = new TimeSeries("Serie 2", Week.class);
        week = new Week(25, 2003);
        series.add(week, 40);
        week = new Week(26, 2003);
        series.add(week, 50);
        week = new Week(27, 2003);
        series.add(week, 60);
        collection.addSeries(series);
        collection.setXPosition(TimePeriodAnchor.MIDDLE);
        plot.setDataset(1, collection);
        plot.setRenderer(1, new StandardXYItemRenderer());
        plot.setDomainAxis(new DateAxis("Date"));
        plot.setRangeAxis(new NumberAxis("Value"));
        plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
        plot.setRangeAxisLocation(AxisLocation.TOP_OR_LEFT);

        JFreeChart chart = new JFreeChart(plot);
        chart.setTitle("Overlaid Test");
        chart.setLegend(new StandardLegend());

        return chart;

    }

    public static void main(String[] args) {

        OverlaidChartTest oct = new OverlaidChartTest("Overlaid Chart Test");
        oct.pack();
        oct.setLocation(400, 300);
        oct.setVisible(true);

    }

} //OverlaidChartTest 
David Gilbert
JFreeChart Project Leader

:idea: Read my blog
:idea: Support JFree via the Github sponsorship program

DopeForADay
Posts: 32
Joined: Thu Apr 22, 2004 9:15 am

Post by DopeForADay » Thu Jul 29, 2004 2:50 pm

Thank you very much, I didn't know I had to do that and read over it looking at the demo code. Sorry.

Locked