JFreeChart 不会在线程上的每次迭代时显示图形?

2024-03-16

我使用线程在一个类中获取计数器值并写入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 轴为最后一个值的浮点值,但没有图形表示。


Don't睡在事件调度线程 (EDT) http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html。如图所示Swing 中的并发 http://docs.oracle.com/javase/tutorial/uiswing/concurrency/,使用工作线程更新 EDT 上的数据集process()。显示了完整的示例here https://stackoverflow.com/a/13205322/230513.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JFreeChart 不会在线程上的每次迭代时显示图形? 的相关文章

随机推荐