2012-03-31 9 views
1

私はローズインディアのチュートリアルに続いて、次のコードを使用してキャンドルスティックグラフを取得しています。しかし、私が配列を作成しようとすると、データセットの作成時にnullポインタがスローされます。Jfreeグラフがnullポインタ例外を投げる

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) 

私が間違っ 何をやっている私は、例外が日付配列とは何かを持って実現します。私は日付配列を印刷するときこれは私がget.The時間がゼロかもしれませんが、それはnullポインタの例外をスローする必要があることを意味します。

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/)(私の質問に対する答えは明白でしょう)を投稿してください。 –

+0

final JFreeChart chart = ChartFactory.createCandlestickChart( "燭台デモ"、 "時間"、 "価格"、データセット、偽); リターンチャート。私はdatsetに何か問題があるようだが、私はそれを識別することができないと言ったように – user1092042

+1

入力と出力のためのコードの書式を使用してください。 * "データセットに問題があるようです" * SSCCEをハードコードデータで準備してその理論をテストするのはなぜですか?これを達成できるのであれば、データセットが問題になることを指摘します。ハードコードされたデータが同じ問題を示している場合は、編集として投稿するとさらに助けてくれるかもしれません。 –

答えて

0

時間が0であってもよいが、それはそれはNULLポインタ 例外をスローする必要がありますを意味します。 nullポインタ例外をスローすると、データセット自体がnullではないことがわかりますが、データセット内のデータを指定してcreateCandlestickChartメソッドを実行すると、指定データがnullになることがあります。私は、あなたがデータセットのいくつかのX値に焦点を当てる必要がありますね。(org.jfree.data.xy.DefaultHighLowDataset。のgetX(DefaultHighLowDataset.java:147))

1

あなただけemtpy、任意のデータを提供されていません配列(デフォルトは初期化済み)。したがって、日付配列にはNullPointerExceptionの原因となるNull値が含まれています。私は(あなたのコードから)日付配列の印刷がどのようにあなたにそのような結果を与えるかを見ることができません。私はあなたのコードを試して、日付(より正確には、)はnull値しか含んでいません。

行番号org.jfree.data.xy.DefaultHighLowDataset.getX(DefaultHighLowDataset.java:147)は、日付配列にアクセスし、項目のgetTimeを呼び出します(使用しているバージョンとは多少異なる場合があります)。

+0

私は配列を取り込む部分を削除しました。私の配列が適切な方法で設定されているかどうかを確認するprintステートメントはそれ以降です。 – user1092042

+0

わかりました。しかし、NPEは、日付配列のどこかの要素がnullであることを示唆しています。 – nansen

+0

トップに私のコメントを見てください。 – user1092042

関連する問題