Copied from this post (by Ted Schwartz) in the forum:
http://www.jfree.org/phpBB2/viewtopic.php?t=24523
I've found a bug in jfreechart-1.0.9 code for org.jfree.data.xy.XYSeries. There was a change some time ago which introduced the notion of allowing duplicate X values in XYSeries data. The method addOrUpdate(Number x, Number y) was never modified to support this, and therefore duplicate data were overwriting existing data. This is the fix I've made, but I don't know how to submit a patch...
$ diff original/jfreechart-1.0.9/source/org/jfree/data/xy/XYSeries.java fixed/org/jfree/data/xy/XYSeries.java
537c537
< if (index >= 0) {
---
> if (index >= 0 && !allowDuplicateXValues) {
545a546,559
> } else if (index >= 0){
> XYDataItem item = new XYDataItem(x, y);
> // need to make sure we are adding *after* any duplicates
> int size = this.data.size();
> while (index < size
> && item.compareTo(this.data.get(index)) == 0) {
> index++;
> }
> if (index < this.data.size()) {
> this.data.add(index, item);
> }
> else {
> this.data.add(item);
> }
558,561d571
< // check if this addition will exceed the maximum item count...
< if (getItemCount() > this.maximumItemCount) {
< this.data.remove(0);
< }
562a573,576
> // check if this addition will exceed the maximum item count...
> if (getItemCount() > this.maximumItemCount) {
> this.data.remove(0);
> }
Logged In: YES
user_id=112975
Originator: NO
A fix has been committed to Subversion for inclusion in the upcoming 1.0.10 release.
Regards,
Dave Gilbert
JFreeChart Project Leader
Hi,
I think there is still something wrong with this.
If you have autosort true and allowduplicates true as well, it can happen that the value already exists and it is the first in the list, in which case the index returned would be zero. And we end up trying to add a new value at index -1, which makes it blow up with:
java.lang.IndexOutOfBoundsException: Index: -1, Size: 13
at java.util.ArrayList.add(ArrayList.java:367)
at org.jfree.data.xy.XYSeries.addOrUpdate(XYSeries.java:571)
Thanks,
Teodor
Hi Teodor,
You are right. Thanks for spotting/reporting this, I'll fix it now.
Best regards,
Dave
Fix committed to Subversion for inclusion in the 1.0.12 release.