好的,我知道我刚刚问了一个类似的问题,但我试图简化它,所以我使用了一个看起来很糟糕的例子,一个我没想到的问题,因此得到了没有解决我的问题的答案问题。
我有这样的设置:
我在 EDT 中有一个方法。它在一堆 JTextAreas 中循环,并删除空的。
那么有什么问题呢?
每次移除 JTextArea 时,都会触发一个侦听器,然后在视觉上更新 GUI(将 JTextArea 下方的所有视觉对象拉起)。
那么会发生什么?好吧,当循环正在执行时,JTextAreas 并没有被视觉删除,它们被添加到 EDT que 中(我猜),然后在循环完成后立即将它们全部删除。然后发生的事情是所有的侦听器都立即启动并弄乱了整个 GUI。
由于一切都在 EDT 上运行,我希望代码如下所示:
- 开始循环
- 找到一个空的 JTextArea
- 完全移除一个空的 JTextArea -> 触发监听器
- 在监听器中执行代码
- 继续循环
- 查找下一个空的 JTextArea
- 冲洗并重复直到循环结束
我怎样才能强制我的程序这样做呢?
我应该创建一个搜索空白 JTextAreas 的新线程,并在 invokeLater(new Runnable()) 中完成删除吗?进行搜索的实际代码实际上并不是 CPU 密集型的,它只通过 JTextAreas 的 arrayList 并检查 getText().equals(""),所以我真的不认为这是必要的......