java - 使用 SwingWorker 显示加载动画

标签 java multithreading swing jframe 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();

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

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

  • JDialog 加载并绘制但动画不播放
  • JDialog 未在最后处理

我需要什么帮助:

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

最佳答案

使用 SwingWorker在后台“从网络上获取数据”。 publish() 到达时的中间结果。然后,您的 process() 实现可以在事件分配线程上安全地更新 View 组件的模型。即使是适度的粒度,用户也将开始看到数据,而不是无信息的动画。这个完整example更新监听 JTableTableModel,但监听 JTextComponentDocument 也可以工作。

关于java - 使用 SwingWorker 显示加载动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37875547/

相关文章:

java - JTabbedPane 的布局设置

java - 在 hashmap 中使用 double 作为值的问题

java - 使用特定的 Activity 线程发送到服务器

python - Python线程的分析

c# - 对 List<Socket> 的多次访问

java - JScrollPane 在窗口最小化时收缩/折叠

java - 使用 Netbeans GUI Swing Builder 的 JComponent 位置

java - 以编程方式模拟从一个 Android 应用程序到另一个应用程序的用户输入

java - 身份验证后存储附加信息[Spring]

java - Jsoup选择表数据