java使用SwingWorker显示加载动画
我的问题:
我的应用程序中有一个长时间执行的任务(需要从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();
然而,直到任务完成,我收到的只是一个空白框,框架才被重新粉刷,最后它没有得到处理
我搜索了这个问题,发现它与线程和并发(我不熟悉)有关,并找到了使用JDialog
而不是JFrame
的建议,所以我遵循了这个建议。我的结局是:
- JDialog加载并绘制,但动画不播放
- JDialog不会在最后被释放
我需要什么帮助:
我试图搜索更多的问题,并找到建议,如果我理解正确,我应该使用SwingWorker
在线程中运行一个任务,在另一个线程中运行动画。但是,我不熟悉线程和SwingWorker
,需要帮助创建一个简单的SwingWorker
实例来实现我要做的事情
# 1 楼答案
在后台使用^{} “从web获取数据”
publish()
临时结果到达时。然后process()
的实现就可以在事件调度线程上安全地更新视图组件的模型。即使粒度适中,用户也会开始看到数据,而不是没有信息的动画。这个完整的example更新了听力JTable
的TableModel
,但是听力JTextComponent
的Document
也可以工作