亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SWT 從線程中打開一個Shell的問題(在子線程中無法開啟一個新的shell)

SWT 從線程中打開一個Shell的問題(在子線程中無法開啟一個新的shell)

守候你守候我 2019-03-13 18:15:54
描述:我想制作一個不阻塞線程的彈出框,所以自定義了一個Dialog,繼承Dialog并實現Runnable接口。將display作為參數傳入后,獲得parent shell,并實例化child shell,以此shell創建dialog。/**     * Create the dialog.     * @param parentShell     */    private ShowLoadingDialog(Shell parentShell) {        super(parentShell);                    this.shell = parentShell;        this.display = shell.getDisplay();        label = new Label(shell, SWT.NONE);    }        public static ShowLoadingDialog getDialog(Display display){        Shell shell = new Shell(display,SWT.TITLE | SWT.BORDER|SWT.APPLICATION_MODAL);        return new ShowLoadingDialog(shell);    }定義一個open方法,當調用此方法時,會執行自身這個Runnable對象,我把shell的open放在了線程中啟動,當收到關閉shell的通知時(isShow),結束線程@Override    public void run() {        // TODO Auto-generated method stub                            if(this.show){                display.syncExec(new Runnable() {                                        @Override                    public void run() {                        // TODO Auto-generated method stub                        shell.open();                        shell.layout();                        while  ( ! shell.isDisposed() && isShow) {                                  if  ( ! display.readAndDispatch()) ;                                 display.sleep();                           }                      }                });            }    }Q1: 為什么無論我使用syscExec方法還是asyscExec方法,都無法顯示出dialogQ2:為什么將shell的open方法調用從run中移出來調用時,能顯示出dilog但是程序會失去響應(dialog的樣式和坐標我已經在別的方法中設置好了,無需考慮著一點)
查看完整描述

1 回答

?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

我已經找到解決的辦法了,忘了更新: 
關于在使用Java的SWT開發UI時UI總是發生卡死的情況及解決辦法

查看完整回答
反對 回復 2019-04-22
  • 1 回答
  • 0 關注
  • 829 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號