为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Java中使用SwingWorker?

如何在Java中使用SwingWorker?

红颜莎娜 2019-07-04 16:30:47
如何在Java中使用SwingWorker?与我先前的问题有关:调用Java中另一个类的重新绘制吗?我是Java新手,我看过一些关于SwingWorker的教程。然而,我不知道如何用我在前面的问题中给出的示例代码来实现它。有人能解释一下如何使用SwingWorker来处理我的代码片段和/或向我介绍一个不错的教程吗?我看过了,但我还不太明白。
查看完整描述

3 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

同意:

在事件调度线程(EDT)上运行长期运行的任务会导致GUI锁定。

不同意:

因此,所做的事情之一是使用SwingUailties.InvokeLater和InvokeAndWait来保持GUI的响应性。

InvokeLater仍然在EDT上运行代码,并且可以冻结您的UI!试试这个:

SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(100000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

至少,我不能移动我的鼠标一旦我点击按钮,触发的actionPerformed与上面的代码。我是不是遗漏了什么?


查看完整回答
反对 回复 2019-07-04
?
大话西游666

TA贡献1817条经验 获得超14个赞

    你是正确的。通常,将在事件分派线程之外调用InvokeLater,以便在事件分派线程上运行某些内容,例如,长时间运行的任务可能会调用InvokeLater来更改显示。这是因为对Swing对象的操作必须发生在事件线程中,以维护线程安全。


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 486 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信