如何检查EDT(事件调度线程)是否已完成在Java中调度事件

时间:2013-01-18 11:31:07

标签: java swing events awt event-dispatch-thread

在我的工具中,我记录了从用户应用程序生成的事件。现在,用户可以使用我的工具重播他的场景。

在重播用户录制的场景时,我将记录的事件逐个发布到“EventQueue”:

eventQueueObj.postEvent(eventObj);

在大多数情况下,重放用户录制的场景没有问题。

为了解释我的问题,我将举一个简短的例子。

我的工具的用户想检查在他的应用程序中,“文件”菜单下的“关闭”按钮是否有效。他的情景是:

1)单击“文件”菜单。

2)单击“打开菜单项”

3)从文件选择器中选择文件。

4)单击“文件选择器上的打开”。

5)打开文件后,单击“文件菜单”。

6)单击关闭菜单项。

重播步骤1到步骤4没有问题。现在在步骤5,我应该等到文件打开(文件被打开非常大并且需要一些时间)。如果我不等到文件打开并向前移动,“文件”菜单下的“关闭”菜单项将保持禁用状态。因此,不会在“关闭”菜单项上触发鼠标单击事件。

我的问题是“如何从Event Dispatch Thread获取已完成当前事件处理的信息?”

在此之后,我可以点击“文件”菜单,然后点击步骤6。

我不想使用 sleep()来递归检查是否启用了“关闭”菜单项。因为我只想等待所需的时间而不是一些大概的时间。

如果我使用 sleep(),在大多数情况下,即使用户的文件打开操作完成,我也会浪费一些执行时间。

0 个答案:

没有答案