Link to home
Start Free TrialLog in
Avatar of blarouche
blarouche

asked on

JFreeChart no source attached

Hi Experts,

I am trying to create a chart from a dataset.

Everything is all right, I have no error but when I run the program I have a nullpointer exception no source attached.

I think the problem is with my class path.

I downloaded JFreeChart from SourceForge and I put the jar files into my jre directory.

Is it all I have to do or where do I put the source files  jfreechart-1.0.2/source/org/jfree.
Avatar of sciuriware
sciuriware

Put it in the /ext directory rather.

;JOOP!
That would be C:\Program Files\Java\jre1.5.0_09\lib\ext  for me.

;JOOP!
Avatar of blarouche

ASKER

Sorry the jar files have been put exactly there jre1.5.0_09\lib\ext.

Do I have to include the folder  jfreechart-1.0.2/source/org/jfree also ?
No, on second thoughts, I think you make a wrong call from your application.
Otherwise you would not have a nullpointer exception.

;JOOP!
Here is the exact error message

Exception in tread "main" java.lang.NullPointerException
      at org.jfree.data.xy.DefaultHighLowDataset.getX(DefaultHighLowDataset.java:131)
     etc....

If I click on the error here is the explanation :
     Source not found
     The jar file jfreechart-1.0.2.jar has no source attachment.
     you can attach the source by clicking Attach Source below


Here is my console :

Exception in thread "main" java.lang.NullPointerException
      at org.jfree.data.xy.DefaultHighLowDataset.getX(DefaultHighLowDataset.java:131)
      at org.jfree.data.xy.AbstractXYDataset.getXValue(AbstractXYDataset.java:77)
      at org.jfree.data.general.DatasetUtilities.iterateDomainBounds(DatasetUtilities.java:699)
      at org.jfree.data.general.DatasetUtilities.findDomainBounds(DatasetUtilities.java:644)
      at org.jfree.chart.renderer.xy.AbstractXYItemRenderer.findDomainBounds(AbstractXYItemRenderer.java:617)
      at org.jfree.chart.plot.XYPlot.getDataRange(XYPlot.java:3185)
      at org.jfree.chart.axis.DateAxis.autoAdjustRange(DateAxis.java:1190)
      at org.jfree.chart.axis.DateAxis.configure(DateAxis.java:604)
      at org.jfree.chart.axis.Axis.setPlot(Axis.java:823)
      at org.jfree.chart.plot.XYPlot.<init>(XYPlot.java:503)
      at org.jfree.chart.ChartFactory.createHighLowChart(ChartFactory.java:1690)
      at graph.HighLowChartDemo.execute(HighLowChartDemo.java:116)
      at graph.HighLowChartDemo.<init>(HighLowChartDemo.java:53)
      at graph.HighLowChartDemo.main(HighLowChartDemo.java:134)
Can you post the code fragment for your main method?
  public static void main(final String[] args) {

    final HighLowChartDemo chart = new HighLowChartDemo("eurodollars","High Low Chart");
    chart.execute();
    chart.pack();
    RefineryUtilities.centerFrameOnScreen(chart);
    chart.setVisible(true);
   
}


private void execute(){

 DBQuotes pointer = new DBQuotes(true);      
      
      
    /**
     * Loads Daily Prices
     */
    price = getPrices(symbol,pointer);        
    if (price.getSize()==0){
        System.out.println("No quotes founds for symbol "+symbol+", system can't works.");
        System.exit(1);
    }

 high = new double[price.getSize()];
 low  = new double[price.getSize()];
 close = new double[price.getSize()];
 open = new double[price.getSize()];
 date = new int[price.getSize()];    
 volume = new double[price.getSize()];  
 d = new Date[price.getSize()];  
   
for (int i=price.getFirst();i<price.getLast()+1;i++){
    high[i] = price.getHigh(i);
    //System.out.println(price.getHigh(i));
    low[i] = price.getLow(i);
    //System.out.println(price.getLow(i));
    close[i] = price.getClose(i);
    //System.out.println(price.getClose(i));
    open[i] = price.getOpen(i);
    //System.out.println(price.getOpen(i));
    date[i] = price.getDate(i);
    //System.out.println(price.getDate(i));
    volume[1] = price.getVolume(i);
   
    try{
    DateFormat sdf = new SimpleDateFormat("yyyMMdd");      
    d[i] = sdf.parse(Integer.toString(i));
    }catch (ParseException e) {
    }

}
      
      

final DefaultHighLowDataset dataset = new DefaultHighLowDataset("Chart for "+symbol,d,high,low,open,close,volume);
final JFreeChart chart = ChartFactory.createHighLowChart("High-Low-Open-Close Demo","Time", "Value",dataset, true);

final DateAxis axis = (DateAxis) chart.getXYPlot().getDomainAxis();
axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);      

pointer.closeDB();
}
ASKER CERTIFIED SOLUTION
Avatar of sciuriware
sciuriware

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Anybody can help me
I run the program many times and found out where the bug is.

The bug happens when the program reaches this block :


final JFreeChart chart = ChartFactory.createHighLowChart("High-Low-Open-Close Demo","Time", "Value",dataset, true);

final DateAxis axis = (DateAxis) chart.getXYPlot().getDomainAxis();
axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);    
I am increasing the point value for this question because I need to solve my problem badly
>>>final JFreeChart chart = ChartFactory.createHighLowChart("High-Low-Open-Close Demo","Time", "Value",dataset, true);

>>>final DateAxis axis = (DateAxis) chart.getXYPlot().getDomainAxis();
>>>axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
>>>final ChartPanel chartPanel = new ChartPanel(chart);
>>>chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
>>>setContentPane(chartPanel);    

Can you give me the line numbers, so we know which line exactly is causing the exception.

;JOOP!
If I delete the following lines the program runs normally without any problems but as you know I have only the frame with no chart.

The problem starts with line final JFreeChart = .....................................................................

>>>final JFreeChart chart = ChartFactory.createHighLowChart("High-Low-Open-Close Demo","Time", "Value",dataset, true);

>>>final DateAxis axis = (DateAxis) chart.getXYPlot().getDomainAxis();
>>>axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
>>>final ChartPanel chartPanel = new ChartPanel(chart);
>>>chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
>>>setContentPane(chartPanel);    




When I add this line :

final JFreeChart chart = ChartFactory.createHighLowChart("High-Low-Open-Close Demo","Time", "Value",dataset, true);

Here is the result :

Exception in thread "main" java.lang.NullPointerException
      at org.jfree.data.xy.DefaultHighLowDataset.getX(DefaultHighLowDataset.java:131)
      at org.jfree.data.xy.AbstractXYDataset.getXValue(AbstractXYDataset.java:77)
      at org.jfree.data.general.DatasetUtilities.iterateDomainBounds(DatasetUtilities.java:699)
      at org.jfree.data.general.DatasetUtilities.findDomainBounds(DatasetUtilities.java:644)
      at org.jfree.chart.renderer.xy.AbstractXYItemRenderer.findDomainBounds(AbstractXYItemRenderer.java:617)
      at org.jfree.chart.plot.XYPlot.getDataRange(XYPlot.java:3185)
      at org.jfree.chart.axis.DateAxis.autoAdjustRange(DateAxis.java:1190)
      at org.jfree.chart.axis.DateAxis.configure(DateAxis.java:604)
      at org.jfree.chart.axis.Axis.setPlot(Axis.java:823)
      at org.jfree.chart.plot.XYPlot.<init>(XYPlot.java:503)
      at org.jfree.chart.ChartFactory.createHighLowChart(ChartFactory.java:1690)
      at graph.HighLowChartDemo.execute(HighLowChartDemo.java:113)
      at graph.HighLowChartDemo.main(HighLowChartDemo.java:133)
I think it has something to do with my dataset.

Maybe my dataset is null. I am new to JFreeChart and I am not sure about creating my dataset
I have solved my problem.


Now I would like to allocate my points. Fortunately I have another question.

I got my chart but I have to resize my Y axis to make it clearer. How do I do that ?



Thank you
Hi experts


This question is still unanswered. Please someone help me