我传递了详细信息/原因,然后直接解决了问题:我有一个 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();
});
}
}
? :\