簡體   English   中英

使用Java SWT單擊對話框時如何停止鼠標單擊

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM