Jfree Chart генерирует исключение нулевого указателя - PullRequest
1 голос
/ 31 марта 2012

Я использую следующий код, чтобы получить график подсвечника после урока из Rose India. Однако, когда я пытаюсь заполнить мой массив, он создает нулевой указатель при создании набора данных.

   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 ]

1 голос
/ 31 марта 2012

Вы не предоставляете никаких данных, только массивы emtpy (инициализировано по умолчанию). Таким образом, ваш массив дат содержит нулевые значения, которые вызывают исключение NullPointerException. Я не вижу (из вашего кода), как печать массива дат может дать вам такой результат. Я попробовал ваш код, и дата (точнее, d) содержит только нулевые значения.

Строка org.jfree.data.xy.DefaultHighLowDataset.getX (DefaultHighLowDataset.java:147) обращается к массиву даты и вызывает getTime для элемента (возможно, что-то другое в используемой вами версии) ,

0 голосов
/ 31 марта 2012

Время может быть нулевым, но означает ли это, что оно должно вызвать исключение нулевого указателя.Выдает исключение нулевого указателя, что означает, что сам ваш набор данных не является нулевым, но когда он выполняет метод createCandlestickChart с указанными данными в вашем наборе данных, указанные данные могут быть нулевыми.Я полагаю, вам следует сосредоточиться на некотором значении X набора данных. (Org.jfree.data.xy.DefaultHighLowDataset. getX (DefaultHighLowDataset.java:147))

...