Swing JfreeChart aktualisieren - mit daten aus thread

hasadunda

Mitglied
Guten Tag,

ich habe da ein kleines Problem mit jFreeChart. Ich erstelle mir ein Panel und erstelle darauf ein jFreeChart, soweit so gut. Da wird mir des Chart auch ohne Probleme angezeigt. Wenn ich nun via Thread dem Dataset Daten hinzufüge verschwindet des Chart und taucht nicht mehr auf.

Vielleicht könnte mir einer von euch sagen was ich hier falsch mache ?!

Java:
public class TestPanel extends JPanel{
	   
	private Daten daten;
	private Boolean isRunning;
	
	class Daten extends Thread{
		
		
		public Daten() {
		}
		
		@Override
		public void run() {
			super.run();
			try {
				_run();	
			} catch ( Exception e ) {
				e.printStackTrace();
			}
		}
		
		private void _run() {
			while (isRunning){
				lastValue = holeDaten();
				series.add(new Millisecond(), lastValue);
			}
		}
	}

    private static final long serialVersionUID = 1L;
    private TimeSeries series;
    private double lastValue = 0.0;
    
    @SuppressWarnings("deprecation")
	public TestPanel ( ) {
        super(new BorderLayout());
        		
        this.setLayout( new BorderLayout( 2, 2 ) );

        this.series = new TimeSeries("Random Data", Millisecond.class);
        TimeSeriesCollection dataset = new TimeSeriesCollection(this.series);
        JFreeChart chart = createChart(dataset);
        ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(640, 150));
        this.add(chartPanel);
        isRunning = false;
    }
    
    public void startTestPanel(){
      daten = new Daten();
      isRunning = true;
      daten.start();
    }
    
    public void stopTestPanel(){
    	if( isRunning){
    		isRunning = false;
    		daten.interrupt();
    	}
    }

    private JFreeChart createChart( XYDataset dataset) {
    	final JFreeChart result = ChartFactory.createTimeSeriesChart("", "", "", dataset, false, false, false);
        final XYPlot plot = result.getXYPlot();
        ValueAxis axis = plot.getDomainAxis();
        axis.setAutoRange(true);
        axis.setFixedAutoRange(1000.0);  // 60 seconds
        axis = plot.getRangeAxis();
        axis.setRange(0.0, 200.0); 
        return result;
    }
}

Ich hoffe das mir jemand helfe kann 🙂
 
ein ausführbares Testprogramm wäre gut, wilde unbekannte Klassen wie 'Daten' sind ja unnötig,
einfach testweise Math.random()-Werte in eine geeignte Chart einfügen,
besser auch mit Pause, Thread.sleep(), nicht Mrd. Wiederholungen in einer sec,

mindestens brauchst du ein repaint() auf die GUI, evtl. irgendwas aktualisierendes auf die Chart
 
Unser Kollege hier benötigt definitiv eine Aktualisierung des Panels.

Entweder zu aktualisiert immer wieder das Panel indem du jpanel.validate() machst oder aber du löschst jedes mal das Panel und machst dann wieder:


panel.add(chartPanel);
 

Neue Themen


Zurück
Oben