Я использую DynamicTimeSeriesCollection для построения измерений из последовательного порта в мой график. Я хочу использовать код, который я нашел в другом сообщении.
Я хочу добиться чего-то подобного: использование JFreeChart для отображения последних изменений во временном ряду
Код из другого сообщения, которое я нашел:
Как совместить код Java-графика и последовательный код Java для считывания значения датчика Arduino?
1. Move dataset and newData up to become instance variables:
DynamicTimeSeriesCollection dataset;
float[] newData = new float[1];
2. Add a method that appends your data to the chart dataset:
public synchronized void addData(byte[] chunk) {
for (int i = 0; i < chunk.length; i++) {
newData[0] = chunk[i];
dataset.advanceTime();
dataset.appendData(newData);
}
}
3. Invoke the method from serialEvent():
demo.addChunk(chunk);
Вот мой метод Serial Event в классе SerialCommunication:
public void serialEvent(SerialPortEvent oEvent) {
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try
{
Date d = new Date();
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String datetime = dt.format(d);
String inputLine = input.readLine();
String[] measurements = inputLine.split(",");
double humidity = Double.parseDouble(measurements[0]);
double temp = Double.parseDouble(measurements[1]);
double ldr = Double.parseDouble(measurements[2]);
humidityList.add(humidity);
tempList.add(temp);
ldrList.add(ldr);
System.out.println(datetime+" > "+inputLine);
}
catch (Exception e) {
System.err.println(e.toString());
}
}
}
И ArrayList в классе Serial Communication:
private ArrayList<Double> humidityList = new ArrayList<Double>();
private ArrayList<Double> tempList = new ArrayList<Double>();
private ArrayList<Double> ldrList = new ArrayList<Double>();
Вот как я объявлял ArrayList в GUI-классе:
private static ArrayList<Double> m1;
private static ArrayList<Double> m2;
private static ArrayList<Double> m3;
public GUI(final String title,ArrayList<Double> humidity,ArrayList<Double> temp,ArrayList<Double> ldr)
{
super(title);
m1 = humidity;
m2 = temp;
m3 = ldr;
Я попытался изменить код, который я нашел с моими измерениями, но не повезло. Любая идея, как я могу это достичь?
SwingWorker
- лучший способ справиться с этим.