2014-10-22 50 views
0

我做在按下启动按钮,当我读到的问题和产生的解决方案JavaFX应用程序。问题是,当我点击开始按钮时,GUI挂起。我看了this post,它建议在Platform.Runlater中包装线程安全的方法。现在如何使JavaFX的线程安全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) 
     } 
    }); 
} 

然而,这是行不通的。

+1

你引用的帖子中写道:(正确地)到“使用'PlatForm.RunLater'快速和简单的操作和'Task'复杂和大型化经营NS”。你将需要并发框架('Task',也许更多)。有关介绍,请参阅[这里](http://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm)。 – 2014-10-22 08:19:27

+0

谢谢,我也尝试在任务之后包装showSolution()方法的内容,然后我调用新线程(task).start();然而,这不会抛出任何异常,但在窗格上没有绘制任何内容。我相信任务正在开始。 – thomasvdbossche 2014-10-22 08:32:19

回答

0

您需要解决runLater外面和长时间运行的操作构建场景图的元素有(没有实际附有他们的父母),然后在一个简单的调用将它们添加到您的真实场景的runLater调用中。

1

你可以找到的后台任务在JavaFX的一个概述,在这里如何处理它们:http://www.guigarage.com/2014/10/datafx-8-released/(滚动标题“ProgressChain”)。

另外我在JavaOne今年提到了我的“JavaFX的企业”谈这个话题。你可以在这里找到的幻灯片:http://de.slideshare.net/HendrikEbbers/javafx-enterprise-javaone-2014?related=1

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