我正在尝试执行以下操作:


发送长执行请求(我在这里使用Events.echoEvent
显示带有“取消”按钮的模态对话框(等待...)
如果用户按下“取消”,对话框将被隐藏,并且不应执行事件方法。
如果用户不按按钮并等待。调用事件方法并关闭等待对话框


我怎样才能做到这一点?

最佳答案

ZK通常在单个线程中针对服务器上的单个请求完成所有工作。 Events.echoEvent使您可以解决此问题,方法是完成请求,然后在全新的请求(和线程)中立即回调服务器。用户与客户端的交互会触发新的请求,因此这也是一个新线程。

因此,在上面的示例中,您将使用三个线程:


对于调用echoEvent的原始请求
用于echoEvent创建的新请求
当用户单击“取消”时创建的请求


显然,第一个要等到最后两个被调用时才会消失,但这是您为了解决问题而需要考虑的问题。

您将在StackOverflow上找到很多有关使两个线程进行交互的讨论,或更具体地说,是让一个线程中断另一个线程。

我将把您引向'How to stop threads in Java?',在这里,被接受的答案比在线程上直接调用interrupt更好地共享某种“停止标志”。

在您的方案中,这将在长时间运行的过程中发挥作用,同时定期检查停止标志(简单的boolean)。当用户单击“取消”时,您只需要将标志翻转到true

09-17 01:49