JavaFX построение графика большего объема?

Не так давно работаю с javaFX. Пишу небольшие программки для логгирования информации с приборов для испытательной лаборатории. Встала проблема визуализации. С выводом до 4000 точек LineChart скрепя справляется, в принципе все хорошо. Но например 56000 точек занимает 1 минуту 16 секунд, 100000 я ждал 5 минут, стоит задача выводить 30 минутный лог с прибора который шлет 400 посылок в секунду, в каждой посылке содержится значение от 8 датчиков то есть это 5 760 000 +-100. Вопрос №1 подскажите есть ли какие-то инструменты для построения графика такого объема? (я думаю что есть но к сожалению за неделю я не нашел примера который бы с этим справился) Вопрос №2 желательно строить такой график в режиме реального времени. До этого делал подобные скрипты на Python там все легко и просто. привожу свой кусок кода для построения :

protected Void call() throws Exception {
            System.out.println("go");
            lineChart.getData().clear();

            XYChart.Series series = new XYChart.Series();
            series.setName("chanel1");
            XYChart.Series series1 = new XYChart.Series();
            series1.setName("chanel2");
            XYChart.Series series2 = new XYChart.Series();
            series2.setName("chanel3");
            XYChart.Series series3 = new XYChart.Series();
            series3.setName("chanel4");
            lineChart.setHorizontalGridLinesVisible(false);
            lineChart.setVerticalGridLinesVisible(false);

            lineChart.setCreateSymbols(false);
            lineChart.setCache(true);


            FileReader fl = new FileReader(tfPath.getText());
            Scanner scan = new Scanner(fl);

            int j = 0;
            int boundUp = 0;
            int boundLow = 65535;
            while (scan.hasNext()) {
                String[] s = scan.nextLine().split(",");
                int[] acp = new int[s.length];

                int finalJ = j;
                for (int i = 0; i < s.length; i++) {
                    acp[i] = Integer.valueOf(s[i]);
                    if (boundUp<acp[i]) {
                        boundUp = acp[i]+300;
                        System.out.println(boundUp);
                    }
                    if (boundLow>acp[i]) {
                        boundLow = acp[i]-100;
                        System.out.println(boundLow);
                    }
                }


                    y.setUpperBound(boundUp);
                    y.setLowerBound(boundLow);


                   Platform.runLater(() -> series.getData().add(new XYChart.Data(String.valueOf(finalJ), acp[0])));
                   Platform.runLater(() -> series1.getData().add(new XYChart.Data(String.valueOf(finalJ), acp[1])));
                   Platform.runLater(() -> series2.getData().add(new XYChart.Data(String.valueOf(finalJ), acp[2])));
                   Platform.runLater(() -> series3.getData().add(new XYChart.Data(String.valueOf(finalJ), acp[3])));



                System.out.println("№"+j+" " +acp[0]+" " +acp[1]+" " +acp[2]+" " +acp[3]);



                j++;
                //fl.close();

            }
            fl.close();
            Platform.runLater(() ->lineChart.getData().addAll(series, series1, series2, series3));
            return null;
        }
    }; 

Ответы (1 шт):

Автор решения: killla_666

Так как готового решения не нашлось (что очень странно конечно) я нашел свой выход. Он заключается в прорисовывании графиков с помощью Line на ScrollPane, пришлось правда повозиться с адаптацией размеров, но все реально. Время загрузки графиков из 56000 точек сократилось с 1м 16сек. до 4сек. что меня полностью устраивает.

→ Ссылка