EDT与听众

时间:2013-03-01 02:36:42

标签: java swing event-dispatch-thread

好吧,我知道我刚问了一个类似的问题,但我试图简化它,所以我用的是一个看似不好的例子,一个我没想到的问题,从而得到了我没有的答案。解决我的问题。

我有这样的设置:

我在EDT中有一个方法。它循环通过一堆JTextAreas,并删除空的。

那是什么捕获?

每次删除JTextArea时,都会触发一个侦听器,然后直观地更新GUI(将所有可视对象拉到JTextArea下面)。

那会发生什么?好吧,当循环正在执行时,JTextAreas不会被直观地删除,它们被添加到EDT que(我猜),然后在循环完成后立即将它们全部删除。那么接下来会发生的是,所有的听众都会立刻开火并弄乱整个GUI。

由于所有内容都在EDT上运行,我希望代码的行为如下:

  • 开始周期
  • 找一个空的JTextArea
  • 完全删除空的JTextArea - >触发听众
    • 执行侦听器中的代码
  • 继续循环
  • 找到下一个空的JTextArea
  • 冲洗并重复直至达到循环结束

如何强制我的程序这样做?

我应该创建一个搜索空白JTextAreas的新线程,并在invokeLater中执行删除(new Runnable())吗? 执行搜索的实际代码实际上不是CPU的意图,它只是通过JTextAreas的arrayList,并且检查是getText()。equals(“”),所以我真的不认为这是必要的......

1 个答案:

答案 0 :(得分:2)

删除单个文本区域。确定是否还有更多要删除的内容(如果是),使用SwingUtilities.invokeLater()对任务进行排队,并调用当前代码。重复,直到删除所有文本区域。