描述:我想制作一個不阻塞線程的彈出框,所以自定義了一個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的樣式和坐標我已經在別的方法中設置好了,無需考慮著一點)
添加回答
舉報
0/150
提交
取消