使用SwingWorker显示加载动画

时间:2016-06-17 07:25:36

标签: java multithreading swing jframe swingworker

我的问题:

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

到目前为止我做了什么:

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

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

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

我搜索了SO的问题,发现它与Threads和并发(我不熟悉)有关,并找到了使用JDialog代替JFrame的建议,所以我跟着建议。我最终得到的是:

  • JDialog加载并绘制,但动画无法播放
  • JDialog不会在最后处理

我需要帮助:

我试图更多地搜索问题并找到建议我应该使用SwingWorker在线程中运行一个任务,如果我已经正确理解则在另一个中运行动画。但是我对线程和SwingWorker不熟悉,需要帮助创建一个简单的SwingWorker实例来实现我想要做的事情

1 个答案:

答案 0 :(得分:1)

使用SwingWorker"从网络上获取数据"在后台。 publish()临时结果到达时。然后,process()的实现可以安全地更新事件分派线程上的视图组件模型。即使是适度的粒度,用户也将开始查看数据而不是无信息动画。完整的example更新了TableModel的{​​{1}},但是JTable的{​​{1}}也可以正常运行。