График не отображается, но значение изменяется в jfreechart?

Друзья, в своем приложении я использую swingworker для генерации jfreechart в качестве альтернативы серверным счетчикам. для этого значения меняются по осям X,Y, но график не отображается. Есть ли проблема в моем коде? пожалуйста, проверьте это друзья..

А по оси "x,y" отображается значение с плавающей запятой, но фактическое значение, полученное из хэш-карты, равно 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();
        }

    }

И результат есть,.

введите здесь описание изображения

Заранее спасибо.


person A.Mohamed Bilal    schedule 07.01.2014    source источник
comment
Вы разместили одни и те же фрагменты здесь и здесь, без попытки следовать предложенному подходу: Не спать на EDT; делать см. Параллелизм в Swing.   -  person trashgod    schedule 07.01.2014
comment
Я только что получил решение, используя этот свингворкер. проблема в том, почему диаграмма здесь не отображается, но значения по осям X, Y меняются на каждой итерации. Я хочу знать, в чем недостаток моего кода.   -  person A.Mohamed Bilal    schedule 07.01.2014
comment
Вне зависимости от того, обновите ли вы этот вопрос или решите задать новый, включите sscce, демонстрирующий проблему, которую вы описываете, и принятый подход.   -  person trashgod    schedule 07.01.2014


Ответы (1)


Вы создали набор данных с одним элементом данных. Если вы настроите средство визуализации на отображение фигур в каждой точке данных, вы увидите один элемент в середине диаграммы. Линии нет, потому что для соединения нужно как минимум две точки данных.

Возможно, вы вызываете этот код в каком-то цикле и ожидаете увидеть несколько элементов... но в этом случае вам не следует каждый раз создавать новый набор данных и новую диаграмму.

person David Gilbert    schedule 07.01.2014
comment
в моем приложении я просто выбираю узел из дерева. Для этого узла я просто извлекаю данные из хэш-карты на каждой итерации и помещаю их в набор данных. На самом деле у меня есть только одно значение. Что я должен сделать, чтобы отобразить jfreechart здесь. @Дэвид Гилберт - person A.Mohamed Bilal; 07.01.2014
comment
Если у вас есть только один элемент данных, я бы создал диаграмму, используя ChartFactory.createXYBarChart(...). Обратите внимание, что существует дополнительный параметр, указывающий, хотите ли вы DateAxis или NumberAxis для оси X. - person David Gilbert; 07.01.2014
comment
А для вашей оси Y, поскольку существует только одно значение, JFreeChart сложно определить, какой диапазон отображать на оси Y. Поэтому вы должны либо установить его вручную, либо вызвать axis.setAutoRangeMinimumSize(2)... использовать любой минимальный размер, который дает вам желаемый результат. - person David Gilbert; 07.01.2014
comment
о, спасибо @david gilbert - person A.Mohamed Bilal; 07.01.2014