我试图做以下事情:
Events.echoEvent
)我该怎么做?
答案 0 :(得分:2)
ZK通常会在单个线程中对服务器上的单个请求执行所有操作。 Events.echoEvent
让你通过完成请求,然后在一个全新的请求(和线程)中立即回到服务器来解决这个问题。用户与客户端的交互会触发新请求,因此也是一个新线程。
因此,在上面的示例中,您将使用三个线程:
echoEvent
echoEvent
显然,第一个将在最后两个被调用的时候消失,但这是你需要考虑的问题才能解决你的问题。
你会在StackOverflow上找到关于让两个线程进行交互的更多讨论,或者更具体地说,让一个线程中断另一个线程。
我会将你推荐给'How to stop threads in Java?',其中接受的答案赞成在线程上直接调用interrupt
时分享某种“停止标志”。
在你的场景中,这会在长时间运行的过程中发挥作用,同时定期检查停止标志(一个简单的boolean
)。当用户点击“取消”时,您只需将标记翻转为true
。
答案 1 :(得分:1)
你可以尝试
创建一个线程来执行上面提到的Sean的长操作 (这是一个独立的线程,而不是ZK请求线程)
创建一个计时器以定期检查该线程的状态。 (这将创建一个javascript计时器,以便在客户端定期发送ajax请求)
并通过ZK客户端编程自定义忙碌掩码以添加取消按钮。 (按钮单击执行另一个ajax请求)
请参阅stackoverflow上的类似文章: Override “Processing” in ZK
编辑:
我的博客上有一些相关文章:
ZK: Customize the mask for showBusy