有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    在后台使用^{}“从web获取数据”publish()临时结果到达时。然后process()的实现就可以在事件调度线程上安全地更新视图组件的模型。即使粒度适中,用户也会开始看到数据,而不是没有信息的动画。这个完整的example更新了听力JTableTableModel,但是听力JTextComponentDocument也可以工作