Jfree图表抛出空指针异常

时间:2012-03-31 09:22:18

标签: java jfreechart

我正在使用以下代码来获取rose india教程之后的蜡烛棒图。但是,当我尝试填充我的数组时,它会在create dataset处抛出一个空指针。

   public class CandleStickChart extends ApplicationFrame {
    static String date[]=new String[2000];
    static double open[]=new double[2000];
    static double close[]=new double[2000];
    static double high[]=new double[2000];
    static double low[]=new double[2000];
    static double volume[]=new double[2000];
    static Date d[]=new Date[2000];

      public CandleStickChart(String titel) {
      super(titel);

      final DefaultHighLowDataset dataset = createDataset();
      final JFreeChart chart = createChart(dataset);
      final ChartPanel chartPanel = new ChartPanel(chart);
      chartPanel.setPreferredSize(new java.awt.Dimension(600, 350));
      setContentPane(chartPanel);
      }

      private DefaultHighLowDataset createDataset() {
      DefaultHighLowDataset data = new DefaultHighLowDataset(
      "", d, high, low, open, close, volume);
      return data;
      }


      private JFreeChart createChart(final 
      DefaultHighLowDataset dataset) {
      final JFreeChart chart = ChartFactory.createCandlestickChart(
      "Candlestick Demo", "Time", "Price", dataset, false);
      return chart;
      }

      public static void main(String args[]) 
      {
    //populating arrays using data
    //checking if array is populated.      
            for(int i=0;i<temp;i++)
            {
                System.out.println(" "+high[i]+" "+low[i]+" "+open[i]+" "+close[i]+" "+volume[i]);
                System.out.println(d[i]);
            }


     CandleStickChart chart = new CandleStickChart("Candle Stick Chart");
      chart.pack();
      RefineryUtilities.centerFrameOnScreen(chart);
      chart.setVisible(true);







    }
    }  

异常

java.lang.NullPointerException
    at org.jfree.data.xy.DefaultHighLowDataset.getX(DefaultHighLowDataset.java:147)
    at org.jfree.data.xy.AbstractXYDataset.getXValue(AbstractXYDataset.java:75)
    at org.jfree.data.general.DatasetUtilities.iterateDomainBounds(DatasetUtilities.java:777)
    at org.jfree.data.general.DatasetUtilities.findDomainBounds(DatasetUtilities.java:677)
    at org.jfree.data.general.DatasetUtilities.findDomainBounds(DatasetUtilities.java:650)
    at org.jfree.chart.plot.XYPlot.getDataRange(XYPlot.java:4551)
    at org.jfree.chart.axis.DateAxis.autoAdjustRange(DateAxis.java:1284)
    at org.jfree.chart.axis.DateAxis.configure(DateAxis.java:716)
    at org.jfree.chart.axis.Axis.setPlot(Axis.java:968)
    at org.jfree.chart.plot.XYPlot.<init>(XYPlot.java:666)
    at org.jfree.chart.ChartFactory.createCandlestickChart(ChartFactory.java:1946)
    at CandleStickChart.createChart(CandleStickChart.java:74)
    at CandleStickChart.<init>(CandleStickChart.java:30)
    at CandleStickChart.main(CandleStickChart.java:189)

我做错了什么 我意识到异常与日期数组有关。当我打印日期数组时这是我得到的。时间可能为零,但这是否意味着它必须抛出空指针异常。

Wed Mar 10 00:00:00 IST 2010
Tue Mar 09 00:00:00 IST 2010
Mon Mar 08 00:00:00 IST 2010
Fri Mar 05 00:00:00 IST 2010
Thu Mar 04 00:00:00 IST 2010
Wed Mar 03 00:00:00 IST 2010
Tue Mar 02 00:00:00 IST 2010
Mon Mar 01 00:00:00 IST 2010
Fri Feb 26 00:00:00 IST 2010
Thu Feb 25 00:00:00 IST 2010
Wed Feb 24 00:00:00 IST 2010
Tue Feb 23 00:00:00 IST 2010
Mon Feb 22 00:00:00 IST 2010
Fri Feb 19 00:00:00 IST 2010
Thu Feb 18 00:00:00 IST 2010
Wed Feb 17 00:00:00 IST 2010
Tue Feb 16 00:00:00 IST 2010
Fri Feb 12 00:00:00 IST 2010
Thu Feb 11 00:00:00 IST 2010
Wed Feb 10 00:00:00 IST 2010
Tue Feb 09 00:00:00 IST 2010
Mon Feb 08 00:00:00 IST 2010
Fri Feb 05 00:00:00 IST 2010

2 个答案:

答案 0 :(得分:1)

您没有提供任何数据,只提供emtpy数组(默认初始化)。因此,您的日期数组包含空值,这会导致NullPointerException。我无法看到(从您的代码中)打印日期数组如何为您提供这样的结果。我尝试了你的代码,日期(d更确切地说)只包含空值。

org.jfree.data.xy.DefaultHighLowDataset.getX(DefaultHighLowDataset.java:147)访问日期数组并在项目上调用getTime(可能在您使用的版本中有不同之处)。

答案 1 :(得分:0)

  

时间可能为零,但这意味着必须抛出空指针   例外。它会抛出空指针异常意味着您的数据集本身不为null但是当它使用数据集中的指定数据执行createCandlestickChart方法时,指定数据可能为null。我想你应该关注数据集的某个X值。(org.jfree.data.xy.DefaultHighLowDataset。 getX (DefaultHighLowDataset.java:147))