Отображение графика LineChart

110
02 июля 2019, 00:00

возникла такая проблема. Мне нужно нарисовать график по Машине Тьюринга(зависимость кол-ва шагов от длины слова), когда я пытаюсь его нарисовать из метода initialize() то он рисует корректно

Но как только я пытаюсь сделать так, чтобы график рисовался при нажатии на кнопку, происходит такое

Сам класс, который рисует график

package sample;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.XYChart;
import java.util.HashMap;
public class FourGraphic extends Thread{
LineChart<Number, Number> chart;
HashMap<String, HashMap<Integer, String>> rules;
FourGraphic(LineChart<Number, Number> chart, HashMap<String, HashMap<Integer, String>> rules){
    this.chart = chart;
    this.rules = rules;
}
public void run(){
    System.out.println(Integer.toString(7, 2));
    XYChart.Series<Number, Number> series = new XYChart.Series();
    series.getData().add(new XYChart.Data(0, 0));
    chart.getData().add(series);
    int n = 0;
    while(true){
        int max = 0;
        for(long i = (int)Math.pow(2, n); i < Math.pow(2, n+1); i++){
            FourRibbersMT mt = new FourRibbersMT(new StringBuffer(Long.toString(i, 2)), rules);
            mt.start();
            try{
                synchronized (mt) {
                    while(!mt.ready){
                        mt.wait();
                    }
                }
            } catch(InterruptedException e){
                e.printStackTrace();
            }
            synchronized (mt) {
                if (mt.getStepsCount() > max) max = mt.getStepsCount();
            }
        }
        series.getData().add(new XYChart.Data<Number, Number>(n + 1,  max));
        n++;
    }
}

}

Метод initalize()

    @FXML
public void initialize(){
    readSingleRules();
    readFourRibbRules();
    singleRibbonField.setOnKeyTyped(new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent event) {
            char c = event.getCharacter().charAt(0);
            if(((c < '0') || (c > '1'))  && c != java.awt.event.KeyEvent.VK_PERIOD && c != 45){
                singleRibbonField.deleteText(singleRibbonField.getText().length() - 1, singleRibbonField.getText().length());
            }
        }
    });
    fourRibbonField.setOnKeyTyped(new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent event) {
            char c = event.getCharacter().charAt(0);
            if(((c < '0') || (c > '1'))  && c != java.awt.event.KeyEvent.VK_PERIOD && c != 45){
                fourRibbonField.deleteText(fourRibbonField.getText().length() - 1, fourRibbonField.getText().length());
            }
        }
    });
    singleStartBtn.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            singleGraphic.getData().clear();
           // graph = new SingleGraphic(singleGraphic, singleRules);
            FourGraphic graph = new FourGraphic(fourGraphic, fourRibbRules);
            graph.start();
            stopSingleBtn.setVisible(true);
        }
    });
}

Подскажите в чем проблема

Answer 1

Наверное поздно, но попробуй создать новый метод. В нём создай поток:

Platform.runLater(()-> { 
    //код по отрисовке графика 
});
READ ALSO
Анимация свайпа в вебвью

Анимация свайпа в вебвью

Хочу создать приложение-книжкуНа данный момент пришёл к решению использовать HorizontalWebView (нашёл на просторах stackoverflow)

135
Unicode и ASCII в Java

Unicode и ASCII в Java

Как известно, Java использует таблицу Unicode для кодировки символовНо при попытке привести символ к int, получается его значение этого символа...

143
Java Swing - как динамически изменять поля фрейма? [закрыт]

Java Swing - как динамически изменять поля фрейма? [закрыт]

Имеется следующий функционал: при запуске программы открывается стартовый фрейм, в котором пользователю необходимо задать некоторые параметрыПо...

121
Работа через плагин gulp-watch

Работа через плагин gulp-watch

Когда запускаю task gulp-watch в bash , то вылетает ошибка : Error: watching app/sass/**/*sass: watch task has to be a function (optionally generated by using gulp

141