在我的工具中,我记录了从用户应用程序生成的事件。现在,用户可以使用我的工具重播他的场景。
在重播用户录制的场景时,我将记录的事件逐个发布到“EventQueue”:
eventQueueObj.postEvent(eventObj);
在大多数情况下,重放用户录制的场景没有问题。
为了解释我的问题,我将举一个简短的例子。
我的工具的用户想检查在他的应用程序中,“文件”菜单下的“关闭”按钮是否有效。他的情景是:
1)单击“文件”菜单。
2)单击“打开菜单项”
3)从文件选择器中选择文件。
4)单击“文件选择器上的打开”。
5)打开文件后,单击“文件菜单”。
6)单击关闭菜单项。
重播步骤1到步骤4没有问题。现在在步骤5,我应该等到文件打开(文件被打开非常大并且需要一些时间)。如果我不等到文件打开并向前移动,“文件”菜单下的“关闭”菜单项将保持禁用状态。因此,不会在“关闭”菜单项上触发鼠标单击事件。
我的问题是“如何从Event Dispatch Thread获取已完成当前事件处理的信息?”
在此之后,我可以点击“文件”菜单,然后点击步骤6。
我不想使用 sleep()来递归检查是否启用了“关闭”菜单项。因为我只想等待所需的时间而不是一些大概的时间。
如果我使用 sleep(),在大多数情况下,即使用户的文件打开操作完成,我也会浪费一些执行时间。