Print

Print


Hi all,

I'm trying to set up a custom bar chart for my model, since the level of control I have over the default inspectors isn't quite enough for my needs. I stumbled upon the sim.display.ChartUtilities class and tried to use it to attach a bar chart directly to my simulation. Unfortunately, I can't figure out how to use it correctly, or rather I am constantly getting a NullPointerException as soon as the simulation runs.

As outlined in its documentation, I call the following functions in my GUIstate class to set up the bar chart:

public void init(Controller c) {
    ...

    BarChartGenerator bcgenerator = ChartUtilities.buildBarChartGenerator(this, "Bar Chart");
    barchart = ChartUtilities.addSeries(bcgenerator, "Bar Chart");  <-- this is where the exception triggers
}

public void setupPortrayals() {
    ...

    ChartUtilities.scheduleSeries(this, barchart, sim.data);
}

These are the top few lines of the trace:
java.lang.NullPointerException
    at sim.util.media.chart.PieChartSeriesAttributes.getElements(PieChartSeriesAttributes.java:40)
    at sim.util.media.chart.PieChartGenerator.update(PieChartGenerator.java:136)
    at sim.util.media.chart.PieChartGenerator.addSeries(PieChartGenerator.java:187)
    at sim.display.ChartUtilities.addSeries(ChartUtilities.java:569)

Either I'm missing something important or there is a bug in the implementation of addSeries. Is there some other way I can create a bar chart with full control over the labels and categories? As I mentioned, the default inspector isn't much help, for instance it sorts numerical categories in an awful way (placing 10 before 2 etc).

Cheers,
Miriam Tschanen