5

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

在回放用户录制的场景时,我使用以下方法将录制的事件一一发布到“EventQueue”:

eventQueueObj.postEvent(eventObj);

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

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

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

1) 单击文件菜单。

2) 点击打开菜单项

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

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

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

6) 单击关闭菜单项。

重播第1步到第4步没有问题。现在在第5步,我应该等到文件打开(打开的文件很大,需要一些时间)。如果我不等到文件打开并继续前进,“文件”菜单下的“关闭”菜单项将保持禁用状态。所以在“关闭”菜单项上触发鼠标点击事件是没有用的。

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

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

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

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

4

1 回答 1

3

这应该有效:

Toolkit.getDefaultToolkit().getSystemEventQueue().peekEvent() == null;

一种不同的异步方法是推送一个特殊的最后一个事件并为它设置一个监听器。然后你不需要通过轮询事件队列来忙等待。

于 2013-01-18T11:44:54.307 回答