gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:47:51 24 4
gpt4 key购买 nike

我是 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:不在 FX 应用程序线程上;当前线程=主线程异常(exception)。将数据点传递到 JavaFX 图表的正确方法是什么?我认为最接近的方法是重写事件类型、事件对象并创建整个事件处理结构......但这对于我试图归档的简单事情来说看起来太复杂了!您能否告诉我,您认为最好/最简单的方法是什么?

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

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<Number,Number> lineChart =
new LineChart<Number,Number>(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
}
});

希望这有帮助。托斯顿

关于java - 如何将数据从java程序传递到javafx应用程序图表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15523280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com