好吧,我知道我刚问了一个类似的问题,但我试图简化它,所以我用的是一个看似不好的例子,一个我没想到的问题,从而得到了我没有的答案。解决我的问题。
我有这样的设置:
我在EDT中有一个方法。它循环通过一堆JTextAreas,并删除空的。
那是什么捕获?
每次删除JTextArea时,都会触发一个侦听器,然后直观地更新GUI(将所有可视对象拉到JTextArea下面)。
那会发生什么?好吧,当循环正在执行时,JTextAreas不会被直观地删除,它们被添加到EDT que(我猜),然后在循环完成后立即将它们全部删除。那么接下来会发生的是,所有的听众都会立刻开火并弄乱整个GUI。
由于所有内容都在EDT上运行,我希望代码的行为如下:
如何强制我的程序这样做?
我应该创建一个搜索空白JTextAreas的新线程,并在invokeLater中执行删除(new Runnable())吗? 执行搜索的实际代码实际上不是CPU的意图,它只是通过JTextAreas的arrayList,并且检查是getText()。equals(“”),所以我真的不认为这是必要的......
答案 0 :(得分:2)
删除单个文本区域。确定是否还有更多要删除的内容(如果是),使用SwingUtilities.invokeLater()
对任务进行排队,并调用当前代码。重复,直到删除所有文本区域。