【问题标题】:JavaFX Loading in Background [duplicate]JavaFX在后台加载[重复]
【发布时间】:2015-10-15 03:02:16
【问题描述】:

我怎么会有一个Dialog,在前台有一个不确定的ProgressIndicator,而主线程在后台加载一堆数据并最终将它加载到主Scene。目前,当程序加载时,页面是白色的,没有响应,而且看起来很糟糕。另外,这是最好的方法还是有更好的方法。

【问题讨论】:

  • 以前有很多关于JavaFX并发的问题以及Oracle JavaFX站点上的文档,请搜索和研究它们。如果您仍然遇到问题并需要帮助,请发帖 mcve 说明您的具体问题。

标签: java javafx javafx-8


【解决方案1】:

您的窗口被冻结/无响应,因为您在主线程(JavaFX 用来呈现您的窗口的线程)中加载此数据。

您需要做的是在一个单独的线程中执行加载,该线程将与主线程并行运行。加载完成后,该线程会通知主线程,并将加载的数据传递给你渲染。

这是创建加载数据的新线程的快速方法:

            Thread myThread = new Thread(new Runnable() {
                @Override
                public void run() {

                    // Perform your loading here
                    // Once the loading is complete, notify the main thread

                }
            });
            myThread.start();

如果你使用这个,你不确定的ProgressIndicator不会受到影响。

有很多方法可以“通知主线程”。您也许可以将主类的一个实例传递给辅助线程,当数据加载完成后,您只需调用该实例上的一个方法。

【讨论】:

  • 我相信 JavaFX 会抛出一个错误,说它不在 FX 线程上
  • @Kyefer “加载数据”时你到底在做什么? JavaFX 会说,如果您尝试在不同的线程中修改 JavaFX 元素,但我的理解是您只是在加载数据,例如读取大文件或其他内容。
猜你喜欢
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 2012-11-29
  • 2013-06-25
  • 2019-11-17
相关资源
最近更新 更多