En temps réel des graphiques en Java

J'ai une application qui met à jour une variable entre 5 à 50 fois par seconde, et je suis à la recherche d'un moyen de dessin continu XY intrigue de ce changement en temps réel.

Si JFreeChart est pas recommandé pour une haute fréquence de mise à jour, de nombreux utilisateurs continuent de dire qu'il travaille pour eux. J'ai essayé d'utiliser cette démo et l'a modifié pour afficher une variable aléatoire, mais il semble qu'il utilise jusqu'à 100% d'utilisation du PROCESSEUR tout le temps. Même si j'ignore que, je ne veux pas être limité à JFreeChart de l'interface utilisateur de la classe pour construire des formes (même si je ne suis pas sûr de ce que ses capacités sont exactement). Serait-il possible de l'intégrer avec Java "formes" et les menus déroulants? (disponible en VB) Sinon, existe-il des solutions de rechange que je puisse voir?

EDIT: je suis nouveau sur le Swing, donc j'ai mis en place un code pour tester la fonctionnalité de JFreeChart avec elle (tout en évitant l'utilisation de la ApplicationFrame classe de JFree puisque je ne suis pas sûr de la façon qui va travailler avec Swing de zones de liste déroulante et boutons). Maintenant, le graphique est mis à jour immédiatement et l'utilisation du PROCESSEUR est élevée. Serait-il possible de tampon de la valeur avec le nouvel ordre de la Milliseconde() et de le mettre à jour, peut-être deux fois par seconde? Aussi, puis-je ajouter d'autres composants pour le reste de la JFrame sans perturber JFreeChart? Comment dois-je procéder? cadre.getContentPane().add(new Button("Clic")) semble écraser le graphique.

package graphtest;
import java.util.Random;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
public class Main {
static TimeSeries ts = new TimeSeries("data", Millisecond.class);
public static void main(String[] args) throws InterruptedException {
gen myGen = new gen();
new Thread(myGen).start();
TimeSeriesCollection dataset = new TimeSeriesCollection(ts);
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"GraphTest",
"Time",
"Value",
dataset,
true,
true,
false
);
final XYPlot plot = chart.getXYPlot();
ValueAxis axis = plot.getDomainAxis();
axis.setAutoRange(true);
axis.setFixedAutoRange(60000.0);
JFrame frame = new JFrame("GraphTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ChartPanel label = new ChartPanel(chart);
frame.getContentPane().add(label);
//Suppose I add combo boxes and buttons here later
frame.pack();
frame.setVisible(true);
}
static class gen implements Runnable {
private Random randGen = new Random();
public void run() {
while(true) {
int num = randGen.nextInt(1000);
System.out.println(num);
ts.addOrUpdate(new Millisecond(), num);
try {
Thread.sleep(20);
} catch (InterruptedException ex) {
System.out.println(ex);
}
}
}
}
}

OriginalL'auteur thodinc | 2009-09-07