从一个线程修改一个系列会产生一堆错误

时间:2021-05-26 20:05:09

标签: java multithreading swing jfreechart

我传递了详细信息/原因,然后直接解决了问题:我有一个 hostname(显示类)和一个点集合(JFreeChart 类)。 当“collectionPoint”,不作为 CollectionPoint,(它创建几个系列的点)访问“显示”时,一切都很好。当 collectionPoint 作为 Thread 访问“显示”时,我收到一堆错误。 我不明白。怎么回事?

显示类:

Thread

CollectionPoint(不是线程)

public class Display extends JFrame {

    private JFreeChart chart;
    TimeSeriesCollection dataset = new TimeSeriesCollection();
    ...
    ...
    // Here the method called
    public synchronized void addSeries(TimeSeries series) {
        dataset.addSeries(series);
        System.out.println("series added");
    }
    ...
}

CollectionPoint(作为线程)

//public class CollectionPoint extends Thread {
public class CollectionPoint {

    private int i;
    private TimeSeries series;
    private ArrayList<TimeSeries> seriesArray;
    private Display display;

    public CollectionPoint() {
        run1();
    }

    public void run1() {

        display = new Display();
        seriesArray = new ArrayList<TimeSeries>();

        for (int i = 0; i < 10; i++) {
            series = new TimeSeries("" + i);
            makeSeries();
            seriesArray.add(series);
        }

        System.out.println("okay");

        seriesArray.forEach((series) -> {
            displayChart(series);
        });
    }

    private void displayChart(TimeSeries series) {
        display.addSeries(series);
    }

    public void makeSeries() {
        for (int j = 0; j < 80000; j++) {
            double _timestamp = (double) j;
            Timestamp timestamp = new Timestamp((long) ((_timestamp * 1000)));
            series.add(new Millisecond(timestamp), j * 2 * i);
        }
    }

    public static void main(String[] args) {

        EventQueue.invokeLater(() -> {
            var ex = new CollectionPoint();
            //ex.start();
        });
    }
}

错误...

public class CollectionPoint extends Thread {
//public class CollectionPoint {

    private int i;
    private TimeSeries series;
    private ArrayList<TimeSeries> seriesArray;

    private Display display;

    public CollectionPoint() {
        //run1();
    }

    public void run() {

        display = new Display();
        seriesArray = new ArrayList<TimeSeries>();

        for (int i = 0; i < 10; i++) {
            series = new TimeSeries("");
            makeSeries();
            seriesArray.add(series);
        }

        System.out.println("okay");

        seriesArray.forEach((series) -> {
            displayChart(series);
        });
    }

    private void displayChart(TimeSeries series) {
        display.addSeries(series);
    }

    public void makeSeries() {
        for (int j = 0; j < 80000; j++) {
            double _timestamp = (double) j;
            Timestamp timestamp = new Timestamp((long) ((_timestamp * 1000)));
            series.add(new Millisecond(timestamp), j * 2 * i);
        }
    }

    public static void main(String[] args) {

        EventQueue.invokeLater(() -> {
            var ex = new CollectionPoint();
            ex.start();
        });
    }

}

? :\

0 个答案:

没有答案
相关问题