2012-03-31 120 views
1

我正在使用以下代碼來獲得繼玫瑰印度教程後的蠟燭棒圖。然而,當我嘗試填充我的數組時,它會在創建數據集時拋出空指針。Jfree圖表拋出空指針異常

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) 

我在做什麼錯 我意識到異常有事情做的日期排列。 BUt當我打印日期數組時,這是我得到的。時間可能爲零,但這是否意味着它必須拋出空指針異常。

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 
+1

'CandleStickChart.java:74'這是74行嗎?爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)(其中我的問題的答案很明顯)。 – 2012-03-31 09:24:41

+0

final JFreeChart chart = ChartFactory.createCandlestickChart( 「Candlestick Demo」,「Time」,「Price」,dataset,false); 回報圖表;正如我所說數據集似乎有一些問題,但我無法識別它 – user1092042 2012-03-31 09:28:38

+1

請使用代碼格式輸入和輸出。 *「數據集似乎有問題」*爲什麼不準備一個有效的硬編碼數據的SSCCE來測試該理論?如果你能做到這一點,就會指出數據集是問題所在。如果硬編碼數據顯示相同的問題,如果您將其作爲編輯進行發佈,我們可能會提供更多幫助。 – 2012-03-31 09:42:57

回答

0

的時間可以爲零,但並不意味着它必須拋出一個空指針異常 。它拋出一個空指針異常意味着你的數據集本身不是null,但是當它在你的數據集中使用指定的數據執行createCandlestickChart方法時,指定的數據可能爲空。我想你應該專注於數據集的一些X值(org.jfree.data.xy.DefaultHighLowDataset。的getX(DefaultHighLowDataset.java:147))

1

您沒有提供任何數據,只是emtpy數組(默認初始化)。因此您的日期數組包含空值,這會導致NullPointerException。我看不到(從你的代碼)如何打印日期數組可以給你這樣的結果。我試過你的代碼,日期(d更準確)只包含空值。

org.jfree.data.xy.DefaultHighLowDataset.getX(DefaultHighLowDataset.java:147)訪問日期數組並調用項目上的getTime(可能與您使用的版本不同)。

+0

我已經刪除了我填充陣列的部分。之後的print語句檢查我的數組是否以適當的方式填充。 – user1092042 2012-03-31 09:54:08

+0

好吧,我明白了。但NPE仍然認爲,date數組中的某個元素爲null。 – nansen 2012-03-31 10:02:30

+0

請在頂部看我的評論。 – user1092042 2012-03-31 10:22:15