如何将数据从java程序传递到javafx应用程序图表?

我是JavaFX的新手,但我不是Java新手。 我有一个庞大的复杂系统,可以在循环中产生一些结果。 我想要实现的是在JavaFX图表上绘制每次迭代的结果。 我这样做对java jFreeChart库没有任何问题,但现在我正在尝试切换到JavaFX。 图表看起来更花哨,我喜欢风格的处理方式。 无论如何,我正在努力了解如何在JavaFX应用程序中向XYChart.Series对象添加点。 oracle网站上的所有教程都以应用程序知道先验的一些固定点开始,并使用以下内容添加它们:

`series.getData().add(new XYChart.Data(1, 23));` 

但我想要实现的是有点不同。 在我的情况下,我的应用程序产生一些结果,一旦它们生成(随机时间)我想在图表上绘制它们。 我使用javafx.application.Application启动一个线程,但是当我尝试向Series对象添加一些点时,我得到一个java.lang.IllegalStateException: Not on FX application thread; currentThread = main java.lang.IllegalStateException: Not on FX application thread; currentThread = mainexception。 将数据点传递给JavaFX图表的正确方法是什么? 我认为最接近这种方法的方法是覆盖Event类型,Event对象并创建一个完整的事件处理结构……但对于我想要归档的简单事情,这看起来太复杂了! 在您看来,请您告诉我,这样做的最佳/最简单方法是什么?

编辑:这里有一些代码供您查看并给我一些建议:

 public class Chart extends Application { private final static XYChart.Series series = new XYChart.Series(); public static void addValue(double gen, double val) { series.getData().add(new XYChart.Data(gen, val)); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("Chart"); final NumberAxis xAxis = new NumberAxis(); final NumberAxis yAxis = new NumberAxis(); final LineChart lineChart = new LineChart(xAxis,yAxis); //defining training set series series.setName("Training"); Scene scene = new Scene(lineChart, 800, 600); lineChart.getData().add(series); primaryStage.setScene(scene); primaryStage.show(); } } class Launcher extends Thread { @Override public void run() { Application.launch(Chart.class); } public static void main(String[] args) throws InterruptedException { new Launcher().start(); System.out.println("Now doing something else..."); for (int i = 0; i < 1000; i++) { double trainValue = Math.random(); Chart.addValue(i, trainValue); Thread.sleep(500); } } } 

为了确保在JavaFX线程中执行向图表添加点的代码,您可以将其添加到在JavaFX线程上执行的Runnable-Object中:

 Platform.runLater(new Runnable() { @Override public void run() { // code to add points to the chart } }); 

希望这可以帮助。 托斯滕