2012-03-31 5 views
1

Ich benutze den folgenden Code, um eine Kerze Stick Graph nach dem Tutorial von Rose Indien. Wenn ich jedoch versuche, mein Array aufzufüllen, wird beim Erstellen des Datasets ein Nullzeiger ausgegeben.Jfree Diagramm werfen null Zeiger Ausnahme

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); 







    } 
    } 

Exception

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) 

Was ich falsch tue erkenne ich die Ausnahme, etwas mit dem Tag-Array zu tun hat. BUt, wenn ich das Datumarray drucke, ist das, was ich bekomme. Die Zeit kann Null sein, aber das bedeutet, dass es eine Nullzeigerausnahme werfen muss.

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' Welches ist Linie 74? Für bessere Hilfe, früher, ein [SSCCE] (http://sscce.org/) (in dem die Antwort auf meine Frage wäre offensichtlich). –

+0

final JFreeChart chart = ChartFactory.createCandlestickChart ( "Candlestick-Demo", "Zeit", "Preis", Dataset, false); Rückgabediagramm; Wie ich gesagt habe, scheint das Dataset ein Problem zu haben, aber ich kann es nicht identifizieren – user1092042

+1

Bitte verwenden Sie Code-Formatierung für Eingabe und Ausgabe. * "Das Dataset scheint ein Problem zu haben" * Warum nicht ein SSCCE mit hartcodierten Daten vorbereiten, die funktionieren, um diese Theorie zu testen? Wenn Sie das erreichen können, würde dies auf den Datensatz hinweisen, der das Problem darstellt. Wenn die hartcodierten Daten das gleiche Problem aufweisen, können wir wahrscheinlich weiter helfen, wenn Sie es als Bearbeitung veröffentlichen. –

Antwort

0

Die Zeit Null sein kann aber nicht bedeuten, dass es eine Null-Zeiger Ausnahme ausgelöst hat. Eine Nullzeigerausnahme bedeutet, dass Ihre Datenmenge selbst nicht null ist. Wenn sie jedoch die createCandlestickChart-Methode mit einer Angabe von Daten in Ihrer Datenmenge ausführt, können die angegebenen Daten null sein. Ich denke, Sie auf einige X-Wert des Datensatzes konzentrieren. (Org.jfree.data.xy.DefaultHighLowDataset. getX (DefaultHighLowDataset.java:147))

1

Sie sind keine Daten bereitstellt, nur emtpy Arrays (Standard initialisiert). Daher enthält Ihr Datums-Array Null-Werte, die die NullPointerException verursachen. Ich kann nicht sehen (aus Ihrem Code), wie das Drucken des Datumsfeldes Ihnen ein solches Ergebnis liefern kann. Ich habe Ihren Code ausprobiert und das Datum (d um genauer zu sein) enthält nur Nullwerte.

Die Zeile org.jfree.data.xy.DefaultHighLowDataset.getX(DefaultHighLowDataset.java:147) greift auf das Datumsfeld zu und ruft getTime auf dem Element auf (möglicherweise in der von Ihnen verwendeten Version etwas anderes).

+0

Ich habe den Teil entfernt, in dem ich meine Arrays bevölkere. Die print-Anweisung überprüft danach, ob meine Arrays ordnungsgemäß ausgefüllt wurden. – user1092042

+0

Ok ich sehe. Aber immer noch schlägt die NPE vor, dass ein Element irgendwo im Datumsfeld null ist. – nansen

+0

Bitte beachten Sie meinen Kommentar oben. – user1092042