Java Swing - JFreeChart App arbeitet langsam

Ich erstelle ein JFreeChart-Programm, das:

Punkte von Splines verschieben darf keine schwarzen Splines (Boundary Splines) kreuzen neue Splines in Echtzeit erstellen (als Grapher) Mausrad Zoom

Zum Hinzufügen neuer Reihen zum Datensatz verwende ich diese Funktion:

   public static XYSeriesCollection createSplineDataset(File[] polFiles) {
        dataset = new XYSeriesCollection();
        for (File polFile : polFiles) {
            XYSeries series = new XYSeries(polFile.getName());
            Scanner s = null;
            try {
                s = new Scanner(new File(polFile.getAbsolutePath()));
            }catch (FileNotFoundException ex) {
                System.out.println("Scanner error!");
            }
            s.useLocale(Locale.US);
            while (s.hasNext()) {
                float x = s.nextFloat();
                float y = s.nextFloat();
                series.add(x, y);
            }
            dataset.addSeries(series);
        }
        return dataset;
    }

Hauptprogramm (es gibt mehr als 500 Code-Strings, das ist also ein Teil davon):

public class SplineDemo {
    // declaration of variables
    private static void display(){
        final File[] polFiles = new File("FORPLOT").listFiles();
        polFiles[0] = new File("FORPLOT/InitPolin1");
        polFiles[1] = new File("FORPLOT/InitPolin0");
        for (int i = 2; i <= 36; i++)
            polFiles[i] = new File("FORPLOT/P"+(i-2));
        dataset = JFunc.createSplineDataset(polFiles); // create dataset
        // --------some code-----------
        NumberAxis domain = new NumberAxis("\u03C1");
        NumberAxis range = new NumberAxis("g(\u03C1)");
        SplineRenderer r = new SplineRenderer(20);
        xyplot = new XYPlot(dataset, domain, range, r);
        final XYLineAndShapeRenderer render = (XYLineAndShapeRenderer) xyplot.getRenderer();
        render.setBaseShapesVisible(true);
        final JFreeChart chart = new JFreeChart(xyplot);
        // --------some code-----------            
        chartPanel = new ChartPanel(chart){
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(640, 480);
            }
        };        
        chart.removeLegend();
        chartPanel.addMouseListener(new MouseListener() {
        //------ for creating new splines and to move points of splines ---------
        });

        chartPanel.addMouseWheelListener(new MouseWheelListener() {
        //--------- zoom ------------
        });

        chartPanel.addMouseMotionListener(new MotionListener());

        chartPanel.addChartMouseListener(new ChartMouseListener() {
        //------ for creating new splines and to move points of splines ---------
        });

        chartPanel.setDomainZoomable(false);
        chartPanel.setRangeZoomable(false);
        chartPanel.setPopupMenu(null);
        frame = new JFrame(Title);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(chartPanel);

        //------ buttons -------

        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.addComponentListener(new ComponentListener() {

            @Override
            public void componentResized(ComponentEvent ce) {
            // ---- to move points when window was resized
            }
        });
    }

    public static class MotionListener implements MouseMotionListener {
    //------ to move points -----------
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                display();
            }
        });
    }
}

So,@ trashgod empfohlenHie ändernuseBuffer aber es hat mir nicht geholfen. Also, mein Problem ist, dass wenn bei 1-5 Splines gleichzeitig eingezeichnet sind, alles im Idealfall schnell funktioniert. Wenn sie mehr als 30 Splines wie in einem Screenshot aufweisen, wird die Arbeit verlangsamt (z. B. sind Punkte nicht zeitlich hinter einer Maus, wenn sie sich bewegen, der Zoom arbeitet langsamer usw.). Worin kann das Problem bestehen? Hier der Bericht von YourKit, den ich aber nicht verstehe. Langsam das neue Zeichnen aller Diagramme oder was geht?

Ich verstehe nicht, wie 30 Diagramme schon so bremsen können. Was wird bei 100+ sein? Wenn es nötig ist, kann ich einen vollständigen Code abwerfen und in zip archive @ projektiere

Antworten auf die Frage(2)

Ihre Antwort auf die Frage