我在一个类中使用线程获取计数器值并在另一个线程中编写JFreeChart
。在执行时,它可以交替工作,但最后只显示图形。它还将y轴标签值显示为Float,但实际检索值为int。我该如何解决这些问题?
XYDataset Dataset;
TimeSeries Series = new TimeSeries("Random Data");
Second sec = new Second();
ChartPanel CPanel;
Value = Integer.parseInt(MySQLClass.Map_MySql.get(""+MainWindow.SelectedNode+""));
String CounterName = MainWindow.SelectedNode.toString();
Series.add(sec, Value);
Dataset = new TimeSeriesCollection(Series);
System.out.println("Ds="+Dataset);
Chart = ChartFactory.createTimeSeriesChart(CounterName, "Time", "Range", Dataset, true, false, false);
System.out.println("Chart Created");
XYPlot Plot = (XYPlot)Chart.getPlot();
Plot.setBackgroundPaint(Color.LIGHT_GRAY);
Plot.setDomainGridlinePaint(Color.WHITE);
Plot.setRangeGridlinePaint(Color.RED);
Panel1.revalidate();
CPanel = new ChartPanel(Chart);
CPanel.setVisible(true);
Panel1.add(CPanel);
System.out.println("Chart Added");
Panel1.validate();
Thread.sleep((int)MainWindow.Interval_Combo.getSelectedItem() * 1000);
System.gc();
这个线程用于访问那两个类
while(true)
{
MySQLClass m = new MySQLClass();
Thread t1 = new Thread(m);
t1.start();
t1.join();
Graph g = new Graph();
Thread t2 = new Thread(g);
t2.start();
t2.join();
}
在MySql类中,我必须获取计数器名称和值,并以跟随方式将其存储在名为Map_Mysql的Hashmap中。
while(rs.next())
{
Map_MySql.put(rs.getString(1), rs.getString(2));
}
我不知道实际问题是什么,请解决这个问题。输出看起来像,
发生MySql
com.mysql.jdbc.JDBC4Connection@2c8ab0
图表出现
42913个
Ds=org.jfree.data.time.TimeSeriesCollection@c204e809
发生MySql
com.mysql.jdbc.JDBC4Connection@1930b4b
图表出现
44217
最后显示Y轴上的浮点值为最后一个值的图形,没有图形表示。
答案 0 :(得分:1)
不要在event dispatch thread (EDT)上睡觉。如Concurrency in Swing所示,使用工作线程在process()
中更新EDT上的数据集。显示了一个完整的示例here。
答案 1 :(得分:1)
对于第二个问题(整数轴标签而不是浮点数),可以通过调用轴上的setStandardTickUnits()方法来处理。您可以传递任何TickUnitSource,但最简单的可能是NumberAxis.createIntegerTickUnits()。