2015-07-02 136 views
2

我目前正在研究一個項目,我想繪製一些測量的時間。爲此,我使用JFreeChart 1.0.13JFreeChart addBin與競爭條件?

我想創建一個帶有SimpleHistogramBin的直方圖,然後將數據添加到這些箱。下面的代碼:

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是否異步添加垃圾箱?我希望向任何方向提示我爲什麼會得到這種行爲。

感謝

回答

3

如果任何人都應該有同樣的問題,我發現了一個解決方案:

而不是使用SimpleHistorgramBin我使用HistogramBin。這基本上減少了我的代碼幾行:

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

這種方法會自動創建我需要的箱子,問題已經消失。