[英]How to stop mouse click when clicking on a dialog using java swt
我有一个对话框,当用户单击对话框中的“确定”按钮时,呼叫从客户端转到服务器,然后开始处理。 同时,当用户处于处理阶段时,如果用户尝试单击对话框中的任何位置,则该对话框将被挂起,然后一旦该过程完成,它就会正常运行。 因此,在该过程完成之前,我不希望用户单击对话框,即使他单击该事件也不应被检测到并且对话框也不应挂起。
我不想使用进度监视器,反正有处理此问题的方法吗?
这是确定按钮按下后我正在使用的代码
`//Server call
startServerProcess(compsTable);
//Async to update UI
Display.getDefault().asyncExec( new Runnable()
{
public void run()
{
label.setText("");
}
});`
即使使用了异步调用,当用户单击对话框上的任何位置时,它仍显示为挂起并表示没有响应。 有什么帮助吗? –
除非您是异步执行的,否则它的行为将与它相同。 SWT正在等待,直到它从服务器获得响应为止,在此期间,您所做的任何操作(例如,单击或执行其他操作)都不会产生任何影响,因为它尚未准备好与用户进行交互。
您可以在Thread中运行该作业,但是ProgressMonitor旨在为您提供一个漂亮的模态UI对话框,告诉您等待。 如果运行单独的线程,则必须检查它们是否两次单击“确定”按钮,或者是否单击了其他可访问的元素。
我认为ergonaut的答案是正确的,您应该使用线程和异步处理。
但是,如果您坚持要在一个UI(!)线程中执行此操作,然后禁用对话框父组合,请发送,接收和处理服务器的响应。 然后启用父组合。 这将阻止处理过程中不必要的事件。
parent.setEnable(false);
send(message)
process(recv());
parent.setEnable(true);
请注意,用户在处理某些内容时会期望收到某种通知。 如果没有显示应用程序正忙,用户可能会认为该应用程序挂起并终止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.