JavaFX Progressbar未使用观察者模式更新

JavaFX Progressbar未使用观察者模式更新,java,javafx,Java,Javafx,所以我实现了观察者模式。在Observer类的更新函数中,我想更新progressbar。问题是它会立即更新到最大值。我没有得到加载动画。应用程序计算一些边。计算边缘后,将在屏幕上绘制边缘 我的观察员如下: GenerateEdgeBottom GenerateEdgeLeft GenerateEdgeRight 我还有一个kochmager和一个javaFX类 我在javaFX类中制作progressbars。javaFX类中有一个绑定所有ProgressBar的函数 我的java

所以我实现了观察者模式。在Observer类的更新函数中,我想更新progressbar。问题是它会立即更新到最大值。我没有得到加载动画。应用程序计算一些边。计算边缘后,将在屏幕上绘制边缘

我的观察员如下:

 GenerateEdgeBottom

 GenerateEdgeLeft

 GenerateEdgeRight
我还有一个
kochmager
和一个javaFX类

我在javaFX类中制作progressbars。javaFX类中有一个绑定所有ProgressBar的函数

我的javaFX类的一部分

public void绑定(GenerateEdgeLeft leftEdges、GenerateEdgeRight rightEdges、GenerateEdgeBottom bottomEdges){
progressBarLeft.progressProperty().unbind();
progressBarLeft.setProgress(0);
progressBarRight.progressProperty().unbind();
progressBarRight.setProgress(0);
progressBarBottom.progressProperty().unbind();
progressBarBottom.setProgress(0);
progressBarLeft.progressProperty().bind(LeftEdge.progressProperty());
progressBarRight.progressProperty().bind(RightEdge.progressProperty());
progressBarBottom.progressProperty().bind(BottomEdge.progressProperty());
lblLeft.textProperty().bind(leftEdges.messageProperty());
lblRight.textProperty().bind(RightEdge.messageProperty());
lblBottom.textProperty().bind(bottomEdges.messageProperty());
}
我的教父

public void变更级别(int-nxt){
边。清除();
科赫设定水平(nxt);
this.leftEdgeTask=新一代eEdgeLeft(koch);
this.bottomEdgeTask=新一代edgebottom(koch);
this.rightEdgeTask=新一代电子照明设备(koch);
tsCalc.init();
tsCalc.setBegin(“开始计算”);
//系统输出打印项次(“测试3”);
Platform.runLater(()->{
//系统输出打印项次(“测试4”);
应用程序绑定(leftEdgeTask、rightEdgeTask、bottomEdgeTask);
期货;
未来f=pool2.提交(bottomEdgeTask);
Future f2=pool2.submit(leftEdgeTask);
未来f3=池2.提交(rightEdgeTask);
加入(f);
添加(f2);
期货.增补(f3);
试一试{
addAll(leftEdgeTask.get());
addAll(rightEdgeTask.get());
addAll(bottomEdgeTask.get());
}捕捉(中断异常e){
e、 printStackTrace();
}捕获(执行例外){
e、 printStackTrace();
}
//系统输出打印项次(“测试5”);
koch.getEdges().clear();
tsCalc.setEnd(“结束计算”);
application.setTextNrEdges(“+koch.getNrOfEdges());
application.setTextCalc(tsCalc.toString());
application.requestDrawEdges();
付款人();
});
}
我的代沟


公共类GeneratedGeleft扩展任务实现了Observer{
私人科赫分形科赫;
//私人科奇曼经理;
私有整数边;
专用int计数器;
私有ArrayList边=新ArrayList();
公共生成Geleft(KochFractal koch){
this.koch=koch;
numberOfEdges=koch.getNrOfEdges()/3;
this.koch.addObserver(this);
}
公共生成的geleft(){
//边缘尺寸
}
公共ArrayList getResult(){
返回边;
}
@凌驾
公共ArrayList调用()引发异常{
计数器=0;
System.out.println(“线程从左开始”);
koch.generateLeftEdge();
edges=koch.getEdges();
返回边;
}
@凌驾
公共无效更新(可观察o,对象arg){
边。添加((边)参数);
计数器++;
updateProgress(计数器,NumberOfEdge);
更新消息(“左:+计数器);
}
}

Future::get
是一个阻塞操作。通过在UI中调用get,可以阻止它,直到任务完成。我修复了progressbars。现在我看不到屏幕上的图纸。你能帮我吗?你是怎么解决这个问题的?通过删除
xxxEdgeTask.get()
?如果是,则需要确保已完成的任务得到处理。浏览文档以获取如何使用进度同步的示例我在3个类中添加了一个done方法。GeneratedGeBottom GeneratedGeleft GeneratedGeRight