JFreeChart addBin有竞争条件?

时间:2015-07-02 20:09:38

标签: java plot jfreechart race-condition

我目前正在开展一个项目,我想在一些时间内进行测量。为此我正在使用JFreeChart 1.0.13

我想创建一个带SimpleHistogramBin s的直方图,然后将数据添加到这些二进制位。这是代码:

    Double min = Collections.min(values);
    Double max = Collections.max(values);
    Double current = min;
    int range = 1000;
    double minimalOffset = 0.0000000001;
    Double stepWidth = (max-min) / range;
    SimpleHistogramDataset dataSet = new SimpleHistogramDataset("");
    for (int i = 0; i <= range; i++) {
        SimpleHistogramBin bin;
        if (i != 0) {
            bin = new SimpleHistogramBin(current + minimalOffset, current + stepWidth);
        } else {
            bin = new SimpleHistogramBin(current, current + stepWidth);
        }
        dataSet.addBin(bin);
        current += stepWidth;
    }

    for (Double value : values) {
        System.out.println(value);
        dataSet.addObservation(value);
    }  

这与Exception in thread "main" java.lang.RuntimeException: No bin.崩溃起初我认为这是由于在垃圾箱中碰到一个间隙引起的,但是当我开始调试时,错误没有发生。程序运行完毕,我得到了一个情节。然后我补充说:

Thread.sleep(1000);

for (Double value : values) {
        System.out.println(value);
        dataSet.addObservation(value);
}  

再次,没有错误。

这让我觉得可能存在某种竞争条件? JFreeChart是否异步添加bin?我希望在任何方向提示我为什么会遇到这种行为。

由于

1 个答案:

答案 0 :(得分:3)

如果有人遇到同样的问题,我找到了解决方案:

而不是使用SimpleHistorgramBin我正在使用HistogramBin。这基本上将我的代码简化为几行:

HistogramDataset dataSet = new HistogramDataset();
dataSet.setType(HistogramType.FREQUENCY);
dataSet.addSeries("Hibernate", Doubles.toArray(values), 1000);

这种方法会自动创建我需要的垃圾箱,问题就消失了。