java - JFreeChart 及时推进?
问题描述
我正在制作一个应用程序,我需要在图表中显示捕获特定数据的实时时间它“工作”,除了它跟不上实时,它一直在计数,好像时间已经过去了!我知道它可能与此 dataset.advanceTime () 相关联,但没有它,图形将变为静态并且即使实时过去也不再前进
package com.mycompany.moveplus;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.util.Date;
import java.util.TimeZone;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.time.DynamicTimeSeriesCollection;
import org.jfree.data.time.Second;
import org.jfree.data.xy.XYDataset;
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.HardwareAbstractionLayer;
public class Atol extends JInternalFrame {
private static final float MINMAX = 100;
private static final int COUNT = 2 * 60;
private Timer timer;
public Atol() {
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
Date date = new Date();
final DynamicTimeSeriesCollection dataset
= new DynamicTimeSeriesCollection(1, 60, new Second());
dataset.setTimeBase(new Second(date));
dataset.addSeries(gaussianData(), 0, "Uso de CPU");
JFreeChart chart = createChart(dataset);
this.add(new ChartPanel(chart), BorderLayout.CENTER);
JPanel btnPanel = new JPanel(new FlowLayout());
SystemInfo si = new SystemInfo(); //Criando uma nova classe de infos do Sistem
HardwareAbstractionLayer hal = si.getHardware(); //Infos de Hardware do sistema
CentralProcessor cpu = hal.getProcessor(); //E as informações da cpu
long[] oldTricks = cpu.getSystemCpuLoadTicks();
timer = new Timer(100, new ActionListener() {
float cpu() {
Double stats = cpu.getSystemCpuLoadBetweenTicks(oldTricks);
//Convertendo o valor de uso da CPU
stats = stats * 100d;
double teste = Math.round(stats * 100.0) / 100.0;
double d = teste;
float f = (float) d;
System.out.println(f);
return f;
}
float[] newData = new float[1];
@Override
public void actionPerformed(ActionEvent e) {
newData[0] = cpu();
// dataset.advanceTime();
dataset.appendData(newData);
}
});
timer.start();
}
private float[] gaussianData() {
float[] a = new float[COUNT];
for (int i = 0; i < a.length; i++) {
a[i] = 2;
}
return a;
}
private JFreeChart createChart(final XYDataset dataset) {
final JFreeChart result = ChartFactory.createTimeSeriesChart(
"", "hh:mm:ss", "CPU%", dataset, true, true, false);
final XYPlot plot = result.getXYPlot();
// DateAxis axis = (DateAxis) plot.getDomainAxis();
plot.setRangeGridlinePaint(Color.decode("#e8e8e8"));
plot.setBackgroundPaint(Color.white);
plot.setOutlinePaint(null);
plot.setOutlinePaint(null);
XYItemRenderer renderer = plot.getRenderer();
renderer.setSeriesPaint(0, Color.decode("#1b6ca8"));
ValueAxis domain = plot.getDomainAxis();
domain.setAutoRange(true);
ValueAxis range = plot.getRangeAxis();
range.setRange(0, MINMAX);
return result;
}
public void start() {
timer.start();
}
public static void main(final String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Atol demo = new Atol();
demo.pack();
demo.setVisible(true);
demo.start();
}
});
}
}
只有当时间真的过去时,我如何才能让它进步?
我正在重用这段代码
解决方案
推荐阅读
- java - 如何(反)序列化并将获得的数据传输到 ArrayList?
- python - 由于数据类型 int 和 bigint 不兼容,读取 parquet 文件时合并模式失败
- r - R中的一个数据框的堆叠列表
- django - Django 有效地获取 ForeignKey 模型的字段?
- php - Html按钮没有点击
- android-security - 收到来自 Google 的邮件“您的应用容易受到 Intent Redirection 的攻击”,但找不到漏洞
- sockets - HAProxy 无法绑定套接字 80 或 443 - Ubuntu
- azure - 自动建议中的多个源字段与一个唯一源字段
- php - Woocommerce 搜索结果:包括来自页面的结果
- docker - 在 .net core 中,如何查看主机的 IP 地址?