【问题标题】:Using SwingWorker to show a loading animation使用 SwingWorker 显示加载动画
【发布时间】:2016-06-17 07:25:36
【问题描述】:

我的问题:

我的应用程序中有一个长时间执行的任务(需要从 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 实例来实现我想要做的事情

【问题讨论】:

    标签: java multithreading swing jframe swingworker


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      相关资源
      最近更新 更多