java - 如何使用 Platform.runLater 使 JavaFX 线程安全

标签 java multithreading concurrency javafx

我正在制作一个 JavaFX 应用程序,在其中读取问题并在按下开始按钮时生成解决方案。问题是当我单击开始按钮时,GUI 挂起。我看了this post这建议将线程安全方法包装在 Platform.Runlater 中。

现在,当单击按钮时, Controller 中的 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)
        }
    });
}

但这不起作用。

最佳答案

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

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

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

关于java - 如何使用 Platform.runLater 使 JavaFX 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26502636/

相关文章:

c++ - 几个线程的多个任务

c++ - 单个生产者和多个单线程消费者

concurrency - gunicorn uvicorn worker.py 如何遵守 limit_concurrency 设置

java - 如何沿着贝塞尔曲线书写文字?

java - 没有 web 的 Spring Java 异常监听器

Java webservices - 在请求 header 中发送对象

c - GTK:将函数调用委托(delegate)给主线程

java - 从 java 访问一个字符设备文件

.net - 如何在.net 中并行启动多个操作?

java - 等到每个外部线程上的 RxJava 出现更多条件 - 跨线程执行单个操作