[英]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.