JavaFX UI创建&进度条更新

时间:2014-03-31 05:22:38

标签: java multithreading javafx task runnable

我这里有一个相当棘手的问题。

我有什么:

我目前正在制作一个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创建委托给后台线程。那么我如何展示进度条?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

尝试将UI创建代码包装在其中:

Platform.runLater(new Runnable(){
    @Override
    public void run() {
        //your JAVAFX UI codes
    }

});