apache-poi 4.0 NullPointer для серии setTitle
Исключение в потоке "main" java.lang.NullPointerException в org.apache.poi.xddf.usermodel.chart.XDDFChartData$Series.setTitle(XDDFChartData.java:122)
Код выглядит следующим образом:
CellReference cellref = new CellReference("A6");
//A6 value = "My Title"
XDDFLineChartData.Series series3 = (XDDFLineChartData.Series)data.addSeries(xs, ys3);
series3.setMarkerSize((short) 6);
series3.setMarkerStyle(MarkerStyle.DIAMOND);
series3.setTitle("My Title",cellref);
Я проверил документацию, требуется строка для arg0
и CellReference
за arg1
,
Я продолжаю заканчивать с NullPointerException
, Я что-то пропустил??
Спасибо за ответы.
1 ответ
Решение
Чтобы ответить на вопрос, как исправить ошибку в XDDFChartData.Series.setTitle
:
В XDDFChartData.Series.setTitle getSeriesText()
используется без нулевой проверки. Но XDDFLineChartData.Series.getSeriesText(), конечно, может вернуть ноль, так как series.getTx()
может вернуть ноль. Поэтому мы должны убедиться, что есть текстовый элемент серии уже перед использованием XDDFChartData.Series.setTitle
,
...
XSSFChart chart = drawing.createChart(anchor);
...
XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
...
XDDFChartData data = chart.createData(ChartTypes.LINE, bottomAxis, leftAxis);
data.addSeries(...);
data.addSeries(...);
chart.plot(data);
if (chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(0).getTx() == null)
chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(0).addNewTx();
data.getSeries().get(0).setTitle("Series 1 Title", null);
if (chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(1).getTx() == null)
chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(1).addNewTx();
data.getSeries().get(1).setTitle("Series 2 Title", null);
...
//setting the axis Ids to the LineChart
chart.getCTChart().getPlotArea().getLineChartArray(0).addNewAxId().setVal(bottomAxis.getId());
chart.getCTChart().getPlotArea().getLineChartArray(0).addNewAxId().setVal(leftAxis.getId());
...