2015-10-15 60 views
-1

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

+0

关于JavaFX并发性以及Oracle JavaFX站点上的文档,有很多以前的问题,请搜索并研究它们。如果您仍然遇到问题并需要帮助,请发布[mcve](http://stackoverflow.com/help/mcve)来说明您的具体问题。 – jewelsea

回答

0

由于您正在主线程(这是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将不会受到影响。

有很多方法可以“通知主线程”。你可以将主类的实例传递给辅助线程,当数据完成加载时,只需调用该实例的方法即可。

+0

我相信JavaFX会抛出一个错误,说它不在FX线程上 – Kyefer

+0

@Kyefer当“加载数据”时你到底在做什么? JavaFX会说,如果你试图在不同的线程中修改JavaFX元素,但我的理解是你只是像读大文件或其他东西一样加载数据。 – JVon