javafx,从另一个线程更新ui

发布于 2021-01-31 15:22:39

我有一个javafx应用程序和一个工作线程,通过javafx.concurrent.Task来实现,它执行一个漫长的过程,即压缩并上传一组文件。
我已通过将任务进度连接到进度条progressProperty
除此之外,我想将有关正在处理的项目的详细状态报告到ui中。 也就是说,正在处理的文件的名称及其大小以及单个文件处理可能引起的任何错误。
用这些信息更新UI不能从工作线程中完成,最多我可以将其添加到同步集合中。
但是然后我需要一些事件来通知UI新数据可用。
javafx是否对此问题提供某些特定的支持?

更新,更好的配方

我没有设计一个临时的跨线程机制作为Platform.runLater,而是试图允许每个属性都被其他线程侦听。就像Task提供的runningProperty和stateProperty一样

关注者
0
被浏览
124
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。

    据我所知,我遇到了类似的问题,必须自己处理错误。我的解决方案是通过方法调用来更新UI:

    就像是:

      try
      {
        //blah...
      }
      catch (Exception e)
      {
        reportAndLogException(e);
      }
      ...
      public void reportAndLogException(final Throwable t)
      {
        Platform.runLater(new Runnable() {
          @Override public void run() {
            //Update UI here     
          }
        });
      }
    

    本质上,我只是手动将其移回UI线程进行更新(就像在几乎所有其他框架中所做的那样)。



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看