Java 图形未显示,但jfreechart中的值发生变化?

Java 图形未显示,但jfreechart中的值发生变化?,java,jfreechart,swingworker,Java,Jfreechart,Swingworker,朋友们,在我的应用程序中,我使用swingworker为服务器计数器生成jfreechart。因此,值在X、Y轴上变化,但图形不显示。我的代码有问题吗?请朋友们检查一下 在“x,y”轴中,它显示浮点值,但hashmap的实际检索值为int。如果我使用 Plot.getRangeAxis().setStandardTickUnits(NumberAxis.createIntegerTickUnits()) 意味着,在Y轴上,只显示当前值,而不显示其附近的值。朋友们,请解决这两个问题。我的图形编码是

朋友们,在我的应用程序中,我使用swingworker为服务器计数器生成jfreechart。因此,值在X、Y轴上变化,但图形不显示。我的代码有问题吗?请朋友们检查一下

在“x,y”轴中,它显示浮点值,但hashmap的实际检索值为int。如果我使用

Plot.getRangeAxis().setStandardTickUnits(NumberAxis.createIntegerTickUnits())

意味着,在Y轴上,只显示当前值,而不显示其附近的值。朋友们,请解决这两个问题。我的图形编码是

   try
    {

        System.out.println("Graph Occur");

        MySQLClass.GraphLock=false;
        Panel1.removeAll();
        XYDataset Dataset;
        TimeSeries Series = new TimeSeries("Random Data");
        Second sec = new Second();
        ChartPanel CPanel;
        if(Operation_Combo.getSelectedItem().toString().equals("MySQL"))
        {
         if(MySQLClass.Map_MySql.get(""+MainWindow.SelectedNode+"").equals(null))
         {
             Value = 0;
         }
         else
         {
             Value = Integer.parseInt(MySQLClass.Map_MySql.get(""+MainWindow.SelectedNode+""));
         }
         System.out.println(Value);
        }
        if(Operation_Combo.getSelectedItem().toString().equals("SQL Server"))
        {
         if(SqlServerClass.Map_SQLServer.get(""+MainWindow.SelectedNode+"").equals(null))
         {
             Value = 0;
         }
         else
         {
             Value = Integer.parseInt(SqlServerClass.Map_SQLServer.get(""+MainWindow.SelectedNode+""));
         }
         System.out.println(Value);
        }
        String CounterName = MainWindow.SelectedNode.toString();
        Series.add(sec, Value);
        Dataset = new TimeSeriesCollection(Series);
        Chart = ChartFactory.createTimeSeriesChart(CounterName, "Time", "Range", Dataset, true, false, false);
        XYPlot Plot = (XYPlot)Chart.getPlot();
       // Plot.getRangeAxis().setStandardTickUnits(NumberAxis.createIntegerTickUnits());

        CPanel = new ChartPanel(Chart);
        Panel1.revalidate();
        Panel1.add(CPanel);
        Panel1.setBackground(Color.white);
        System.out.println("Chart Added");
        Panel1.validate();

        Thread.sleep(MainWindow.Intervel * 1000);
        System.out.println("Sleep="+(MainWindow.Intervel * 1000));
       CPanel.repaint();
        System.gc();
         if(Operation_Combo.getSelectedItem().toString().equals("MySQL"))
        {
        MySQLClass.SQLLock=true;
        new MySQLClass().execute();
        }
        if(Operation_Combo.getSelectedItem().toString().endsWith("SQL Server"))
        {
        SqlServerClass.SQLServerLock=true;
        new SqlServerClass().execute();
        }

    }
结果是


提前感谢。

您已使用单个数据项创建了一个数据集。如果设置渲染器在每个数据点显示形状,则会在图表中间看到一个单独的项目。没有线,因为您至少需要两个数据点来连接


也许您在某个循环中调用此代码,并期望看到多个项。。。但是在这种情况下,你不应该每次都创建一个新的数据集和一个新的图表。

你已经发布了相同的片段,并且没有尝试遵循建议的方法:不要在EDT上睡觉;你看,我刚用那个荡秋千找到了解决办法。问题是为什么图表不在这里显示,但X、Y轴的值在每次迭代中都会发生变化。我想知道我的代码中的缺陷是什么。无论是更新此问题还是选择提出新问题,请包含一个显示您描述的问题和所采取的方法的。在我的应用程序中,我只是从树中选择一个节点。对于该节点,我只是在每次迭代时从hashmap中检索数据并将其放入dataset中。实际上我只有一个值。我应该怎么做才能在这里显示jfreechart@david Gilbert如果您只有一个数据项,那么我将使用ChartFactory.createXYBarChart(…)创建图表。请注意,还有一个附加参数,用于指示x轴和y轴是要使用DateAxis还是NumberAxis,因为只有一个值,JFreeChart很难知道y轴上显示的范围。因此,您应该手动设置它,或者调用axis.setAutoRangeMimimumSize(2)…使用您想要的最小大小。噢,谢谢@david gilbert