Построение графика в реальном времени в Java

Используйте стандартный класс Java DateFormat.

, Например, для отображения текущей даты и время делают следующее:

Date date = new Date(location.getTime());
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));

можно инициализировать объект Даты с собственными значениями, однако необходимо знать, что конструкторы были удержаны от использования, и необходимо действительно использовать Календарный объект Java.

14
задан thodinc 8 September 2009 в 11:15
поделиться

6 ответов

Если ваша переменная обновляется так быстро, нет смысла обновлять диаграмму каждый раз.

Думали ли вы о буферизации изменений переменной и обновлении диаграммы в другом потоке, скажем каждые 5 с? Вы должны обнаружить, что JFreeChart может хорошо справляться с такой частотой обновления.

Поскольку JFreeChart - это обычная настольная библиотека, вы можете очень легко интегрировать ее со стандартным приложением Swing. Или вы можете использовать его для построения графиков через веб-приложение (путем рендеринга в JPEG / PNG и т. Д. JFreeChart также может автоматически генерировать карты изображений, поэтому вы можете использовать наведение курсора мыши и т. Д.)

8
ответ дан 1 December 2019 в 15:12
поделиться

Возможно, вы можете использовать два потока. Один для обновления вашей переменной приоритета равен 10. И второй поток, который рисует так быстро, как возможный приоритет ведьмы равен 5.

Мне пришлось сделать то же самое в игре, которую я пишу.

Возможно, я не понял вашего вопроса.

0
ответ дан 1 December 2019 в 15:12
поделиться

Ответили перед здесь . Ваша переменная изменяется до 50 раз в секунду, но в большинстве случаев вам не нужно обновлять каждый раз, когда вносятся изменения. Вместо этого вы можете обновлять график через регулярные интервалы (например, каждые 100 мс).

0
ответ дан 1 December 2019 в 15:12
поделиться

Если данные обновляются чаще, чем вы можете создать диаграмму, тогда у вас должна быть задача в отдельном потоке, которая восстанавливает диаграмму и запускает другую регенерацию когда это будет сделано. Нет смысла запускать его чаще, чем это, но если окажется, что процессор слишком загружен, вы можете уменьшить частоту его перезапуска. Если обновления не приходят, вы не запускаете повторную генерацию. Я недавно сделал что-то подобное в моем Zocalo проекте . Он делает все, кроме дросселирования.

package net.commerce.zocalo.freechart;

// Copyright 2009 Chris Hibbert.  All rights reserved.

// This software is published under the terms of the MIT license, a copy
// of which has been included with this distribution in the LICENSE file.

import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.Map;
import java.util.HashMap;

/**  Schedule a task like generating a price history graph.  Multiple requests may come
 in sporadically.  We want to ensure that only one is being processed at a time.  If we're
 busy processing when a request comes in, we'll remember to start another when this one is
 done.  Multiple requests that come in while processing will spur a single restart. */
public class ChartScheduler {
    static private Logger log = Logger.getLogger(ChartScheduler.class);
    static private Map<String, ChartScheduler> schedulers = new HashMap<String, ChartScheduler>();
    private AtomicBoolean generating = new AtomicBoolean(false);
    private AtomicBoolean requested = new AtomicBoolean(false);
    private ExecutorService threads = Executors.newCachedThreadPool();
    private Callable<Boolean> callable;
    private int runs = 0;
    private String name;


    private ChartScheduler(String name, final Runnable worker) {
        this.name = name;
        callable = new Callable<Boolean>() {
            public Boolean call() throws Exception {
                worker.run();
                runs++;
                restartIfNeeded();
                return true;
            }
        };
    }

    public static ChartScheduler create(String name, Runnable worker) {
        ChartScheduler sched = find(name);
        if (sched == null) {
            sched = new ChartScheduler(name, worker);
            schedulers.put(name, sched);
        }
        return sched;
    }

    public static ChartScheduler find(String name) {
        return schedulers.get(name);
    }

    public boolean generateNewChart() {
        requested.set(true);
        if (generating.compareAndSet(false, true)) {
            startNewThread();
            return true;
        } else {
            return false;
        }
    }

    private Future<Boolean> startNewThread() {
        generating.set(true);
        requested.set(false);

        return threads.submit(callable);
    }

    private boolean restartIfNeeded() {
        generating.set(false);
        if (requested.get()) {
            return generateNewChart();

        } else {
            return false;
        }
    }

    public boolean isBusy() {
        return generating.get();
    }

    public int runs() {
        return runs;
    }
}
1
ответ дан 1 December 2019 в 15:12
поделиться

Согласно этому сообщению в блоге:

http://jonathanwatmough.com/2008/02/prototyping-code-in-clojure/

его можно реализовать в реальном time »отображение звуковых спектров с использованием библиотеки KJ DSP:

http://sirk.sytes.net/software/libs/kjdss/index.htm

, поэтому, если вы можете обойтись довольно простыми диаграммами, это может быть альтернатива JFreeChart.

1
ответ дан 1 December 2019 в 15:12
поделиться

Я также использую JFreechart для высоких обновлений. JFreeChart обновляет до 10–15 кадров в секунду, но при 100% использовании ЦП. Но если я хочу обновлять его с гораздо большей частотой, он не будет обновляться. Если вы найдете какую-либо библиотеку, которая может обновляться со скоростью около 20 кадров в секунду и может использоваться для разработки приложения на Java, то, пожалуйста, предложите мне также. Я видел много библиотек JFreeChart FAQ , но я не уверен, можно ли кого-нибудь использовать для обновлений со скоростью около 20 кадров в секунду.

0
ответ дан 1 December 2019 в 15:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: