我的问题:
我的应用程序中有一个很长的执行任务(需要从网上获取数据),我试图显示带有动画的加载屏幕(只是一个旋转的圆圈,不需要进度条),而任务正在执行
到目前为止我做了什么:
我在面板中为加载屏幕创建了设计并将其添加到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
的建议,所以我跟着建议。我最终得到的是:
我需要帮助:
我试图更多地搜索问题并找到建议我应该使用SwingWorker
在线程中运行一个任务,如果我已经正确理解则在另一个中运行动画。但是我对线程和SwingWorker
不熟悉,需要帮助创建一个简单的SwingWorker
实例来实现我想要做的事情
答案 0 :(得分:1)
使用SwingWorker
"从网络上获取数据"在后台。 publish()
临时结果到达时。然后,process()
的实现可以安全地更新事件分派线程上的视图组件模型。即使是适度的粒度,用户也将开始查看数据而不是无信息动画。完整的example更新了TableModel
的{{1}},但是JTable
的{{1}}也可以正常运行。