Jor*_*ter 0 java multithreading javafx
我正在制作一个从 API 获取实时价格信息的程序。然后我想在实时更新的 JavaFX 图表上显示价格信息。当我尝试将信息传递给 JavaFX 线程时,它并不总是正确传递,并且 JavaFX 线程无法获取价格信息。
API 调用是在一个单独的线程上完成的,当它有信息时,它就会调用 updateScene 方法。这是我遇到问题的地方,API 线程包含我尝试设置 JavaFX 线程使用的变量的所有信息,但它没有任何信息。
private CandleStickFeed candleStickFeed;
public void updateScene(CandleStickFeed candleStickFeed){
this.candleStickFeed = candleStickFeed;
System.out.println("Feed Size This Thread = " + candleStickFeed.getSize());
Platform.runLater(new Runnable(){
@Override
public void run(){
System.out.println("Feed Size JavaFX Thread = " + candleStickFeed.getSize());
updateChart();
}
});
}
Run Code Online (Sandbox Code Playgroud)
程序有时会输出
进给尺寸 此线程 = 5
馈送大小 JavaFX 线程 = 5
这是我所期望的。但它有时也会输出
进给尺寸 此线程 = 5
馈送大小 JavaFX 线程 = 0
任何帮助将不胜感激。我刚开始使用多线程,所以不确定我在做什么。我一直在寻找不同的答案,但找不到任何答案。谢谢
尝试从 中提取相关信息candleStickFeed,并将该结构传递给 Runnable 子类。
public void updateScene(CandleStickFeed candleStickFeed) {
CandleStickData data = new CandleStickData(candleStickFeed);
Platform.runLater(new ChartUpdateRunnable (data));
}
private class CandleStickData {
private double[] numbers; // or whatever you need
CandleStickData (CandleStickFeed candleStickFeed) {
this.numbers = new double[candleStickFeed.getSize()];
// TODO: populate the data structure
}
}
private ChartUpdateRunnable implements Runnable {
private CandleStickData data;
ChartUpdateRunnable(CandleStickData data) {
this.data = data;
}
@Override
public void run(){
System.out.println("Feed Size JavaFX Thread = " + data);
updateChart();
}
}
Run Code Online (Sandbox Code Playgroud)
原则是不传递可能经常改变状态的提要类,而是提取一个不可变的状态对象,并将其传递给可运行的类实例进行更新。
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |