我这里有一个相当棘手的问题。
我有什么:
我目前正在制作一个JavaFX应用程序,用于在屏幕上呈现图形(包含大量节点和边缘)。我能够使用Graphiz库构建图形,它在我的屏幕上显示正常。但是图形渲染可能需要时间,因为我的图形可以包含> 1000+个节点,而且我在屏幕上绘制它们的速度很慢。这是我的代码
protected synchronized void layoutWithGraphviz() {
if (listener == null)
listener = new LayoutResultListener();
Utils.CreateGraphLayout(this,
listener);
}
现在我的LayoutResultListener()
是一个监听器,可以确保视图上的顶点不会相互重叠/看起来不错,因此如果它们不重新绘制图形。一切都很完美。
我需要什么:
我想要一个进度条来显示我的整体进度。现在因为我不确定我的LayoutResultLisener()会被调用多少次所以我可以使用不确定的进度条。然而,棘手的部分是我无法将UI创建部分委托给后台线程,因为JavaFX不允许这样做。我在这里也看到了它Concurrency in JavaFX
所以我不知道该怎么办我无法将UI创建委托给后台线程。那么我如何展示进度条?有什么想法吗?
答案 0 :(得分:1)
尝试将UI创建代码包装在其中:
Platform.runLater(new Runnable(){
@Override
public void run() {
//your JAVAFX UI codes
}
});