如何使用Platform.runLater使JavaFX成为线程安全的

时间:2014-10-22 07:52:27

标签: java multithreading concurrency javafx

我正在创建一个JavaFX应用程序,在该应用程序中,我按下启动按钮时会读出问题并生成解决方案。问题是,当我单击开始按钮时,GUI挂起。我查看了this post,它建议在Platform.Runlater中包装线程安全的方法。

现在单击该按钮时,将调用控制器中的方法doBtnStartPressed()。此方法仅包含对showSolution()方法的调用。然后我将此方法的内容包装在Platform.runLater中,如下所示:

private void showSolution() {
    Platform.runLater(new Runnable() {
        public void run() {
           // solve problem
           // draw solution on panes (rectangles which represent time windows)
        }
    });
}

但这并不起作用。

2 个答案:

答案 0 :(得分:1)

您可以在JavaFX中找到后台任务的一般概述以及如何处理它们:http://www.guigarage.com/2014/10/datafx-8-released/(滚动到标题" ProgressChain")。

此外,我在我的" JavaFX Enterprise"中提到了这个主题。今年在JavaOne上发表演讲。您可以在此处找到幻灯片:http://de.slideshare.net/HendrikEbbers/javafx-enterprise-javaone-2014?related=1

关于JavaFX和UI工具包中的并发性的一般性讨论可以在这里找到:

答案 1 :(得分:0)

你需要在runLater之外解决长时间运行的操作,并且在那里构造SceneGraph元素(没有实际将它们附加到父元素)然后在一个简单的调用中将它们添加到你的真实场景中runLater call。