代码之家  ›  专栏  ›  技术社区  ›  A. Wali

使用SwingWorker显示加载动画

  •  2
  • A. Wali  · 技术社区  · 8 年前

    我的问题:

    我的应用程序中有一个长时间执行的任务(需要从web获取数据),我正在尝试在执行任务时显示带有动画的加载屏幕(只是一个旋转的圆圈,不需要进度条)

    迄今为止我所做的工作:

    我在面板中创建了加载屏幕的设计,并将其添加到JFrame中,并尝试在长流程的代码之前调用实例化JFrame,然后在流程完成后处理它,如下所示:

    LoadingFrame frame = new LoadingFrame();
    //Long Process 
    Wiring wiring = new Wiring(node.source); 
    wiring.generateScopeForTargetNode();
    // close() calls setVisible(false) and then dispose()
    frame.close();
    

    然而,直到任务完成,我收到的只是一个空白框,框架才被重新粉刷,最后它没有被处理掉。

    我在SO中搜索了这个问题,发现它与线程和并发性有关(我不熟悉),并找到了使用的建议 JDialog 而不是 JFrame ,所以我听从了建议。我最终得到的是:

    • JDialog加载并绘制,但动画无法播放
    • JDialog未在末尾被释放

    我需要的帮助:

    我已尝试搜索更多问题,并找到了我应该使用的建议 SwingWorker 如果我理解正确的话,可以在一个线程中运行一个任务,在另一个线程运行动画。然而,我对线程和 摇摆工人 需要帮助创建一个简单的 摇摆工人 实现了我想要做的事情

    1 回复  |  直到 8 年前
        1
  •  1
  •   Community kfsone    7 年前

    使用 SwingWorker “从web获取数据”。 publish() 临时结果。您对 process() 然后可以在事件分派线程上安全地更新视图组件的模型。即使粒度适中,用户也会开始看到数据,而不是无信息的动画。这个完成了 example 更新 TableModel 倾听的声音 JTable ,但是 Document 倾听的声音 JTextComponent 也会起作用。