Java Swing - 在 EDT 上运行
2022-09-04 00:57:59
我有几个关于Swing和使用EDT进行GUI更新的问题。我刚刚开始阅读这些东西,所以我是这个领域的一个完全的初学者:
- 在 EDT 上运行需要哪些操作?如果他们不这样做,是否只是提出了异常?
- 是否有任何特定时间我们实际上自动处于EDT上?
- 如果我们使用来调度任务,我们会将其排队到当前的GUI更新任务队列(EDT)中,对吗?
SwingUtilities.invokeLater
- 对上述队列的访问我猜是同步的,或者使用了一些并发集合,但是如果我从两个后台线程计划两个GUI更新任务,则不可能说将首先添加哪一个?例如,如果线程 1 FIRST 提交了一个将 JLable 的文本设置为“是”的任务,然后,不久之后,第二个线程出现并提交了将该值设置为“否”的任务,我们是保证结果为“是”,还是只是操作系统如何调度这些事情的问题?
-
SwingWorker究竟如何确保该方法在EDT上运行?它设置以下代码:
done()
future = new FutureTask<T>(callable) { @Override protected void done() { doneEDT(); setState(StateValue.DONE); } };
所以我想知道FutureTask是否以某种方式确保它被称为?invokeLater
感谢您的所有回答。